Mam dziwnie pozorny problem z powłoką, z poleceniem w $ PATH, które wydaje się, że powłoka (ksh, działająca na Linuksie) odmawia wywołania. Bez pełnego kwalifikowania polecenia otrzymuję:
# mycommand
/bin/ksh: mycommand: not found [No such file or directory]
ale plik można znaleźć, za pomocą którego:
# which mycommand
/home/me/mydir/admbin/mycommand
Widzę też wyraźnie ten katalog w $ PATH:
# echo $PATH | tr : '\n' | grep adm
/home/me/mydir/admbin
Exe w tej lokalizacji wydaje się normalny:
# 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
a jeśli uruchomię go jawnie, używając w pełni kwalifikowanej ścieżki:
# /home/me/mydir/admbin/mycommand
Widzę oczekiwany wynik. Coś tutaj zdecydowanie myli powłokę, ale nie wiem, co to może być?
EDYCJA: znajdowanie czegoś, co wyglądało na podobne pytanie: Plik binarny nie zostanie wykonany po uruchomieniu ze ścieżką. Np.> ./ program nie działa, ale> program działa dobrze
Przetestowałem także więcej niż jedną taką komendę w mojej $ PATH, ale znajduję tylko jedną:
# for i in `echo $PATH | tr : '\n'` ; do test -e $i/mycommand && echo $i/mycommand ; done
/home/me/mydir/admbin/mycommand
EDYCJA 2:
Od rana problem zniknął , a teraz jestem w stanie wykonać plik wykonywalny.
Można to uznać za potwierdzenie sugestii wylogowania i zalogowania, ale zrobiłem to ostatniej nocy bez powodzenia. To wylogowanie / logowanie powinno również wykonać równoważne działanie polecenia „hash -r”, które zostało zasugerowane (który fwiw wydaje się być wbudowanym ksh, a nie tylko wbudowanym bash).
W odpowiedzi na niektóre odpowiedzi:
Jest to plik wykonywalny, a nie skrypt (patrz odwołanie do ELF w danych wyjściowych polecenia file).
Nie sądzę, że strata pomogłaby. To ostatecznie wymusza wykonanie polecenia w pełni kwalifikowanego. Przypuszczam, że mógłbym wykonać przyczepność strace do bieżącej powłoki, ale skoro nie mogę już repro, nie warto próbować tego.
w zmiennej PATH nie było średników. Ponieważ nie mogę już repro, nie będę zaśmiecać tego pytania pełną ścieżką $ PATH.
próba użycia innej powłoki (tj. bash) byłaby czymś, czego próbowałem, jak sugerowano. Po rozwiązaniu problemu nie będę wiedział, czy to by pomogło.
Zasugerowano mi również sprawdzenie uprawnień do katalogu. Robię to, dla każdego z katalogów do tego widzę:
# 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
Własność katalogu $ HOME jest pomieszana (nie powinna to być grupa główna). Może to powodować inne problemy, ale nie wiem, jak by to spowodowało.