Obwohl dies von einigen anderen gut beantwortet wurde, möchte ich einige Gedanken hinzufügen:
1) PATH wird nur abgefragt, wenn die aufgerufene ausführbare Datei keine Pfadelemente enthält. einKommando würde in $ PATH nachgeschlagen, ./somecommand
oder /usr/bin/somecommand
, oder ../../bin/somecommand
nur Gebrauch Verzeichnis Regeln, nicht PATH
Wenn es in PATH mehrere ausführbare Dateien mit demselben Namen gibt, welche wird bevorzugt?
Es stoppt beim ersten gefundenen und liest $ PATH von links nach rechts.
Ist das aktuelle Verzeichnis in der Suche enthalten, wenn die Datei ausgeführt wird?
Befindet sich das aktuelle Verzeichnis in PATH, wird es durchsucht. Denken Sie daran, dass ein leeres Verzeichnis in PATH das aktuelle Verzeichnis enthält. Beispiel: PATH =: / usr / bin (leer) PATH = / usr / bin: (leer am Ende) und PATH = / usr / bin :: / bin (leer in der Mitte) enthalten effektiv das aktuelle Arbeitsverzeichnis.
Angenommen, in einem aktuellen Verzeichnis befindet sich eine Datei mit dem Namen executable.sh. Würde das funktionieren, wenn es ausgeführt wird und $ ausgeführt. gehört nicht zum PATH?
Es würde es nie finden, wenn es PATH durchsucht. Wenn sich das aktuelle Verzeichnis nicht in PATH befindet, wird es bei einer PATH-Suche nicht gefunden.
Das heißt (und es tut mir leid, um Verwirrung zu stiften), wenn es einen Alias oder eine Funktion gibt, die den Befehl ausführt, wird er ausgeführt. Oder wenn Ihre Shell einen Location-Cache hatte und sich die ausführbare Datei im Cache befand, wird sie möglicherweise gefunden. Es wird es also niemals in PATH finden, aber es kann auf andere Weise ausgeführt werden.
which <executable>
Befehl wird in diesem Thread nützlich sein.