Mam plik w $ HOME / bin (zanim zapytasz, tak, jest on na mojej ścieżce) o nazwie, test
którą potwierdziłem, można wykonać poprawnie, gdy uruchomię go z pełną ścieżką do pliku. Mam jednak naprawdę dziwny problem, gdy nie uruchamiam go w ten sposób. Gdy tylko uruchamiam test
terminal, nic nie robi i natychmiast wraca. Wiem, że nie jest to problem ze znalezieniem pliku z kilku powodów:
Brak komunikatu o błędzie. Zwykle, jeśli pliku nie można znaleźć lub nie można go wykonać, zostanie wydrukowany komunikat informujący o tym.
Uruchomienie
which test
nadal zwraca prawidłową ścieżkę do pliku.Prawdopodobnie najdziwniejsze ze wszystkich - skrypt działa poprawnie po uruchomieniu
strace
. Próbowałem użyć,strace
aby sprawdzić, czy mogę dowiedzieć się, co się dzieje, ale kiedy go uruchomiłemstrace
, zadziałało zgodnie z oczekiwaniami z 0 problemami.
źródło
type
, niewhich
. Zobacz Dlaczego nie użyć „które”? Czego więc użyć?Odpowiedzi:
test
to niefortunna nazwa do użycia, jest to standardowe narzędzie do testów warunkowych . (W rzeczywistości jest to to samo polecenie co[
wif [ ... ]
, wygląda po prostu na syntaktyczne, ale tak naprawdę jest zwykłym poleceniem.)test
jest również wbudowany np. w Bash, więc uruchamianietest
nigdy nie szuka twojego pliku binarnego ze ścieżki.test
bez argumentów zwraca tylko 1 (fałsz).Uruchamianie
strace test
nie wymaga wbudowanej powłoki, ponieważstrace
nie implementuje żadnych narzędzi. Po prostu wykorzystuje to, co znajduje w twoimPATH
. Zauważ, że prawdopodobnie masz standardtest
w/bin/test
lub/usr/bin/test
, więc jeśli to będzie pierwszy wPATH
,strace
uruchom go.Na moim
which
Bashie jest także zewnętrzne polecenie, więc nie ma też pojęcia o wbudowanych. Z drugiej strony, komenda jest wbudowany do powłoki i pokaże, że .type
type test
test is a shell builtin
Zobacz także: Dlaczego nie użyć „które”? Czego więc użyć?
źródło