PATH-Präferenz in bashrc

PATH-Präferenz in bashrc

Ich habe mich gefragt, was in der folgenden Situation passiert. Angenommen, ich habe eine ausführbare Datei in einem Verzeichnis, das sich in PATH in .bashrc befindet. Wenn ich die Datei in ein anderes Verzeichnis kopiere, das ebenfalls in PATH festgelegt ist, und diese Datei vom Terminal aus ausführe, welche Kopie führe ich dann aus?

Kann ich eine Präferenz festlegen, die besagt: „Wenn eine Datei an mehr als einer Stelle innerhalb von PATH vorhanden ist, führe diese an erster Stelle aus, statt an zweiter.“

Antwort1

Die schnelle Antwort

Um herauszufinden, welche Kopie bashausgeführt werden soll, verwenden Sie das in Bash integrierte Dienstprogramm . Um beispielsweise typeherauszufinden, welche Kopie von ausgeführt wird, führen Sie Folgendes aus:du

$ type du
du is /usr/bin/du

Die Theorie

Wenn Sie bashdie Ausführung von etwas anfordern, bashwerden zwei Schritte ausgeführt:

Zunächst wird der Speicherort der Datei im Cache gesucht. Dabei handelt es sich um eine Liste mit den Namen ausführbarer Dateien und dem Speicherort der Datei bei ihrer letzten Ausführung bash.

Zweitens: Wenn sich die Datei nicht im Cache befindet, wird der Pfad überprüft, wobei jedes Verzeichnis im Pfad von links nach rechts durchsucht wird.

Beachten Sie, dass die Antwort davon abhängt, ob Sie die ausführbare Datei zufällig in der aktuellen Shell ausgeführt haben, bevor Sie das Kopieren durchgeführt haben. Wenn ja, bashhaben Sie möglicherweise ihren Speicherort im Cache gespeichert und es wirdignorierenalle neuen Speicherorte, an denen sie sich nach dem Erstellen von Kopien befinden kann. Wenn sie sich nicht im Cache befindet, hängt die Ausführung der Datei nur von der Reihenfolge der Verzeichnisse im Pfad ab.

Mehr Details

Um zu sehen, was sich im aktuellen Cache von Bash befindet, führen Sie Folgendes aus:

$ declare -p BASH_CMDS
declare -A BASH_CMDS='([du]="/usr/bin/du" )'

Oben sehen Sie, dass nur dubeim Ausführen mehr Befehle im Cache waren. Wenn ich weitere Befehle ausgeführt und es dann erneut ausgeführt hätte, wäre mehr im Cache.

Um den aktuellen Pfad anzuzeigen, führen Sie Folgendes aus:

$ echo $PATH
/bin:/usr/bin:/opt/bin:/usr/local/bin:/usr/X11R6/bin

Der Pfad ist eine durch Doppelpunkte getrennte Liste. Oben sind fünf Verzeichnisse im Pfad aufgeführt. Sie werden von links nach rechts durchsucht.

Kann ich eine Präferenz festlegen?

Ja, Sie können die Reihenfolge der Verzeichnisse im Pfad ändern.

Alternativ können Sie für interaktives Arbeiten einen Alias ​​festlegen. Beispiel:

$ alias dd=/opt/bin/dd

Nachdem der obige Alias ​​festgelegt wurde, können Sie ddin die Befehlszeile Folgendes eingeben, wodurch bashder Cache und der PFAD ignoriert und ausgeführt werden (oder der Versuch unternommen wird, es auszuführen) /opt/bin/dd.

verwandte Informationen