Ich habe ein bizarr anmutendes Shell-Problem mit einem Befehl im $ PATH, den die Shell (ksh, läuft unter Linux) scheinbar feige ablehnt, aufzurufen. Ohne den Befehl vollständig zu qualifizieren, erhalte ich:
# mycommand
/bin/ksh: mycommand: not found [No such file or directory]
aber die Datei kann gefunden werden, von denen:
# which mycommand
/home/me/mydir/admbin/mycommand
Ich sehe das Verzeichnis auch explizit in $ PATH:
# echo $PATH | tr : '\n' | grep adm
/home/me/mydir/admbin
Die exe an diesem Ort scheint normal zu sein:
# 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
und wenn ich es explizit unter Verwendung eines vollqualifizierten Pfads ausführe:
# /home/me/mydir/admbin/mycommand
Ich sehe die erwartete Ausgabe. Irgendetwas verwirrt die Shell hier definitiv, aber ich bin ratlos, was es sein könnte?
BEARBEITEN: Finden einer ähnlichen Frage: Binärdatei wird nicht ausgeführt, wenn sie mit einem Pfad ausgeführt wird. ZB> ./ Programm funktioniert nicht, aber> Programm funktioniert gut
Ich habe auch mehr als einen solchen Befehl in meinem $ PATH getestet, finde aber nur einen:
# for i in `echo $PATH | tr : '\n'` ; do test -e $i/mycommand && echo $i/mycommand ; done
/home/me/mydir/admbin/mycommand
EDIT2:
Ab heute Morgen ist das Problem verschwunden und ich kann jetzt die ausführbare Datei ausführen.
Das könnte als Bestätigung des Vorschlags zum Abmelden und Anmelden angesehen werden, aber das hatte ich letzte Nacht ohne Erfolg getan. Dieses Abmelden / Anmelden hätte auch das Äquivalent zum Ausführen des vorgeschlagenen Befehls 'hash -r' sein müssen (bei dem es sich anscheinend auch um ein ksh-Builtin und nicht nur um ein bash-Builtin handelt).
Als Antwort auf einige der Antworten:
Dies ist eine ausführbare Datei, kein Skript (siehe ELF-Referenz in der Ausgabe des Dateibefehls).
Ich glaube nicht, dass eine Strace geholfen hätte. Das führt dazu, dass der Befehl gezwungen wird, vollständig qualifiziert auszuführen. Ich nehme an, ich hätte die aktuelle Shell strace attach machen können, aber da ich keine Reproduktion mehr machen kann, ist es sinnlos, das zu versuchen.
Im $ PATH waren keine Semikolons. Da ich keinen Repro mehr machen kann, werde ich diese Frage nicht mit dem vollen $ PATH überladen.
es wäre etwas gewesen, das ich auch versucht hätte, wie vorgeschlagen wurde, eine andere Shell (dh Bash) zu versuchen. Wenn das Problem weg ist, weiß ich jetzt nicht, ob das geholfen hätte.
Es wurde mir auch vorgeschlagen, die Verzeichnisberechtigungen zu überprüfen. Dabei sehe ich für jedes der Verzeichnisse bis zu diesem:
# 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
Der Besitz des $ HOME-Verzeichnisses ist durcheinander (sollte keine Stammgruppe sein). Das könnte andere Probleme verursachen, aber ich sehe nicht ein, wie es dieses verursacht hätte.