Paradox im Verständnis der "Reihenfolge des Bootens" von Programmen, die von $ PATH angegeben werden

3

Hintergrund

In diesem Tutorial erfahren Sie, wie Sie git unter OSX 10.8.5 "richtig installieren":

Um laufen die neueste Version Sie benötigen eine Shell - Pfad einzustellen , so dass / usr / bin / git läuft nach / usr / local / bin

...

Fügen Sie also in den Pfad [in meinem Fall: ~ / .bash_profile] ein , der dem folgenden ähnelt, und behalten Sie das bei, was Sie bereits im Pfad haben. Jedes Segment ist durch einen Doppelpunkt getrennt:

export PATH="/usr/local/bin:/usr/bin/git:/usr/bin:/usr/local/sbin:$PATH"

                                   ^ Focus on this

Mein Verständnis ist also folgendes:

  • Wenn ich mich anmelde, gibt BASH den weiter rechts in der export PATH=...Zeile angehängten Elementen den Vorrang
  • $ PATH befindet sich am am stärksten :begrenzten Eintrag in der export PATH=...Zeile
  • $ PATH enthält /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

Also ... Wenn meine Annahmen richtig sind, sollte das Tutorial (oben zitiert) sicherlich so aussehen:

export PATH="$PATH:/usr/bin/git"

Anstatt:

export PATH="/usr/local/bin:/usr/bin/git:/usr/bin:/usr/local/sbin:$PATH"


Meine Fragen sind:

Ist das Tutorial falsch? Wenn nicht, welche meiner Annahmen sind dann falsch? Wenn meine Annahmen nicht falsch sind UND das Tutorial nicht falsch ist, erklären Sie bitte, warum ...


Hinweis: Ich bin mir bewusst, dass dies für OSX 10.8.5 möglicherweise nicht relevant ist. In diesem Fall melden Sie sich bitte als "Off-Topic" für den entsprechenden Stapelaustausch an. Aber AFAIK, meine Ubuntu-Maschine hat gut funktioniert, wenn ~ / .bashrc folgende Dinge enthält:

export PATH=$PATH:<myProgram1>:<myProgram2>:...

Kann es sein, dass sich BASH in OSX anders verhält? Ich weiß es nicht...

hallo_hier_andy
quelle
1
Wenn danach sein /usr/bin/gitsoll /usr/local/bin, dann benutze es export PATH="$PATH:/usr/bin/git", es ist einfach so!
user3439894
@ user3439894, vorerst ein Hoch auf ... aber ich glaube, ich würde gerne genauere Informationen darüber erhalten, wie BASH mit OSX funktioniert ... Wenn zum Beispiel die Version des Tutorials "funktioniert", würde dies mein gesamtes Verständnis von BASH bedeuten (zumindest in Englisch) OSX) war falsch
hello_there_andy
1
Wenn Sie wissen möchten, wie es bashfunktioniert, lesen Sie die Manpage. Wie bash ist, hängt mehr von seiner Version als vom Betriebssystem ab. OS X / macOS hat in der Regel ältere Versionen von bash als das aktuelle Linux Distros.
user3439894

Antworten:

6

Das Tutorial ist schlecht formuliert, man sollte niemals eine Binärdatei (wie /usr/bin/git) in PATHnur Verzeichnisse einfügen. Eine bessere Alternative wäre zu schreiben

Um die neueste Version auszuführen, müssen Sie Ihren Shell-Pfad so anpassen, dass zuvor/usr/local/bin gesucht wird /usr/bin

Also , wenn Sie setzen PATHauf /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbindie manuell installierte Version gitwird von abgeholt werden /usr/local/bin.

PS: Die Handhabung PATHfunktioniert bei allen Unix-basierten Systemen gleich, die verschiedenen Verzeichnisse werden von links nach rechts nach dem Befehl durchsucht.

nohillside
quelle
1
Mit dem Befehl können Sie auch whichbestimmen, welcher Befehl verwendet wird. Öffnen Sie einfach Ihr Terminal und sagen Sie, which gitund es wird antworten /usr/bin/git(in meinem Fall kann Ihr Terminal variieren).
Jan
1
Achtung: Der Befehl whichbasiert auf PATHeinigen Shells. Verwenden Sie lieber das eingebaute Tool, typedas für die Analyse erstellt wurde, ohne von Ihrem abhängig zu sein PATH.
Dan
Vielleicht ist dies ein Paradigmenwechsel für mich ... mein Verständnis war das Gegenteil. Dies bedeutet im Wesentlichen, dass @ user3439894 in seinem Kommentar zum OP falsch war? "Wenn / usr / bin / git nach / usr / local / bin stehen soll, dann verwenden Sie export PATH =" $ PATH: / usr / bin / git ", es ist einfach so!"
Hallo_Da_Under
2
@hello_there_andy user3439894 wurde wahrscheinlich von der Formulierung im Tutorial in die Irre geführt. "Passen Sie Ihren Shell-Pfad so an, dass / usr / bin / git nach / usr / local / bin läuft" ist einfach nicht sinnvoll.
Nohillside
2
Ja, das tun sie. Ich übernahm diese Religion gegen whicheine Zeit, in der ein Tippfehler .cshrcdiese Funktion veranlasste, in eine rekursive Schleife einzutreten.
Dan