Chociaż niektórzy inni dobrze na to odpowiedzieli, chciałbym dodać kilka przemyśleń:
1) PATH jest sprawdzane tylko wtedy, gdy wywoływany plik wykonywalny nie zawiera elementów ścieżki. somecommand będzie wyglądał w $ PATH, ./somecommand
lub /usr/bin/somecommand
, czy ../../bin/somecommand
tylko zasady katalogów używają, nie PATH
Jeśli w PATH znajduje się wiele plików wykonywalnych o tej samej nazwie, który z nich jest preferowany?
Zatrzymuje się przy pierwszym znalezionym, odczytując $ PATH od lewej do prawej.
Czy bieżący katalog jest uwzględniany podczas wyszukiwania pliku?
Jeśli bieżący katalog znajduje się w zmiennej PATH, wówczas jest przeszukiwany. Pamiętaj, że pusty katalog w zmiennej PATH zawiera katalog bieżący. np. PATH =: / usr / bin (wiodący pusty) PATH = / usr / bin: (końcowy pusty) i PATH = / usr / bin :: / bin (środkowy pusty) wszystko efektywnie obejmie bieżący katalog roboczy.
Załóżmy, że w bieżącym katalogu znajduje się plik o nazwie executable.sh. Czy to zadziałałoby, gdyby zostało wykonane $ wykonane i. nie jest częścią ŚCIEŻKI?
Nie znalazłby go, wyszukując ŚCIEŻKĘ. Jeśli bieżący katalog nie znajduje się w ŚCIEŻCE, nie znajdzie go podczas wyszukiwania ŚCIEŻKI.
To powiedziawszy (i przepraszam za zamieszanie), jeśli istnieje alias lub funkcja, która uruchamia polecenie, zostanie uruchomione. Lub jeśli twoja powłoka ma pamięć podręczną lokalizacji, a plik wykonywalny znajduje się w pamięci podręcznej, może ją znaleźć. Tak więc nigdy nie znajdzie go w ŚCIEŻCE, ale może być uruchamiany w inny sposób.
which <executable>
polecenia będzie przydatne w tym wątku.