$ PATH içinde bir komutla kabuğun (ksh, Linux üzerinde çalışıyor) çağırmak için korkakca reddetmeyi reddettiği tuhaf bir kabuk sorunu var. Komutu tam olarak nitelendirmeden:
# mycommand
/bin/ksh: mycommand: not found [No such file or directory]
ancak dosya şu şekilde bulunabilir:
# which mycommand
/home/me/mydir/admbin/mycommand
Ayrıca açıkça bu dizin $ PATH bakın:
# echo $PATH | tr : '\n' | grep adm
/home/me/mydir/admbin
Bu konumdaki exe normal görünüyor:
# file /home/me/mydir/admbin/mycommand
/home/me/mydir/admbin/mycommand: setuid setgid ELF 64-bit LSB executable, x86-64, version 1 (SYSV), for GNU/Linux 2.6.4, dynamically linked (uses shared libs), not stripped
# ls -l mycommand
-r-sr-s--- 1 me mygroup 97892 2012-04-11 18:01 mycommand
ve ben tamamen nitelikli bir yol kullanarak açıkça çalıştırmak:
# /home/me/mydir/admbin/mycommand
Beklenen çıktıyı görüyorum. Burada bir şey kesinlikle kafa karıştırıyor, ama ne olabilirim?
EDIT: benzer bir soru neye benzediğini bulma: İkili bir yol ile çalıştırıldığında yürütülmez. Örn.> ./ program çalışmaz ama> program iyi çalışıyor
Ayrıca benim $ PATH birden fazla böyle bir komut için test, ama sadece bir tane bulmak:
# for i in `echo $PATH | tr : '\n'` ; do test -e $i/mycommand && echo $i/mycommand ; done
/home/me/mydir/admbin/mycommand
EDIT2:
Bu sabah itibariyle sorun ortadan kalktı ve şimdi çalıştırılabilir dosyayı yürütebiliyorum.
Bu durum, çıkış ve giriş önerisini doğrulamak olarak düşünülebilir, ancak bunu dün gece başarı olmadan yaptım. Bu oturum kapatma / oturum açma işlemi, önerilen 'hash -r' komutunu çalıştırmaya eşdeğer olmalıdır (ki bu da sadece bir bash yerleşimi değil, bir ksh yerleşimi gibi görünüyor).
Bazı cevaplara yanıt olarak:
Bu bir komut dosyası değil yürütülebilir bir dosyadır (dosya komut çıkışındaki ELF referansına bakın).
Bir askerin yardımcı olacağını düşünmüyorum. Bu, komutu tam nitelikli yürütmeye zorlar. Mevcut kabuk üzerinde bir strace eki yapabileceğimi düşünüyorum, ama artık üreyemediğim için bunu denemenin bir anlamı yok.
$ PATH içinde noktalı virgül yoktu. Artık üreme yapamayacağım için, bu soruyu $ PATH ile doldurmayacağım.
başka bir kabuk (yani bash) denemek, önerildiği gibi, ben de denedim bir şey olurdu. Sorun ortadan kalktığında, bunun yardımcı olup olmayacağını artık bilemeyeceğim.
Ayrıca bana dizin izinlerini kontrol etmek önerildi. Bunu yaparak, buna kadar olan dizinlerin her biri için şunu görüyorum:
# ls -ld $HOME $HOME/mydir $HOME/mydir/admbin
drwxr-xr-x 10 me root 4096 2012-04-12 12:20 /home/me
drwxrwsr-t 22 me mygroup 4096 2012-04-12 12:04 /home/me/mydir
drwxr-sr-x 2 me mygroup 4096 2012-04-12 12:04 /home/me/mydir/admbin
$ HOME dizini sahipliği bozuldu (kök grup olmamalı). Bu başka sorunlara neden olabilir, ama buna nasıl sebep olacağını görmüyorum.