Was ist der Zweck von PATH?
So findet Ihre Shell Programme. Wenn Sie ls
beispielsweise eingeben, wird ein Programm ausgeführt, ls
das /bin
auf den meisten Systemen, einschließlich Mac OS X, ausgeführt wird. Ihre Shell kann dies nur finden, weil /bin
es sich in der PATH
.
Die Shell sucht von PATH
links nach rechts nach Programmen . Wenn sich ls
auf Ihrem System zwei Programme befinden und sich beide in Ihrem Verzeichnis befinden PATH
, wird das Programm in dem Verzeichnis gefunden, das zuerst in Ihrem aufgeführt ist PATH
.
Was ist der Unterschied zwischen / etc / path und ~ / .bash_profile?
Eingestellte Pfade /etc/paths
werden PATH
beim Start in allen Shells unter Mac OS X zum Start hinzugefügt.
~/.bash_profile
ist nur eines von mehreren Shell-Skripten, die Bash beim Start ausführt, und einige davon sind Bash-spezifisch. Wenn Sie also Ihre Shell ändern, wird Mac OS X ebenfalls ausgeliefert tcsh
und zsh
beispielsweise werden Änderungen vorgenommen, /etc/bashrc
die nicht für Ihre neue Shell gelten.
Es handelt sich auch /etc/paths
um eine Konfigurationsdatei auf Systemebene, die ~/.bash_profile
pro Benutzer erstellt wird. Wenn Sie mehrere interaktive Benutzer auf Ihrem Mac eingerichtet hätten, möchten /etc/paths
Sie keine Verzeichnisse hinzufügen , die nicht in allen Benutzern angezeigt werden sollen PATH
. Gleiches gilt /etc/bashrc
, außer dass dies natürlich nur für Benutzer gilt, die Bash als Shell verwenden.
Was ist der Unterschied zwischen PATH und $ PATH und $ {PATH}?
Normalerweise sehen Sie die Variable nur ohne Siegel, wenn Sie die Variable einstellen. FOO=bar
Setzt die FOO
Umgebungsvariable auf die Zeichenfolge bar
. Wenn Sie eingeben set
, zeigt die Shell alle Umgebungsvariablen an. In diesem Fall wird die Variable auch ohne Siegel angezeigt.
$PATH
und ${PATH}
sind in der Regel austauschbar. Sie weisen die Shell an, den PATH
Wert der aktuellen Variablen direkt zu erweitern . Der Unterschied hängt damit zusammen, wie und wo Sie sie verwenden. Beispielsweise:
$ FOO=bar
$ echo $FOO
bar
$ echo $FOOx
$ echo ${FOO}x
barx
Im zweiten echo
Befehl gibt die Shell nichts aus, da sie die Shell auffordert, eine Variable namens aufzurufen FOOx
, die nicht vorhanden ist. Die Shell behandelt nicht vorhandene Variablen als leer. Da der dritte echo
die geschweifte Klammer-Syntax verwendet, kann die Shell sehen, dass Sie die FOO
Variable anfordern und dass dies x
nur ein weiteres Zeichen ist, das Sie unmittelbar danach drucken möchten.
Es gibt übrigens eine andere Möglichkeit, den gleichen Effekt ohne geschweifte Klammern zu erzielen:
$ echo "$FOO"x
barx
Umgebungsvariablen werden in doppelte Anführungszeichen erweitert, und die Anführungszeichen trennen die x
von der Variablenerweiterung, sodass die Shell das Richtige tut.
Ich verwende die FOO
Umgebungsvariable hier nur zur Verdeutlichung. Alles, was ich oben geschrieben habe, gilt genauso gut PATH
, da es sich nur um eine andere Umgebungsvariable handelt. Die Beispieltexte wären nur viel länger.
Was bedeutet Export PATH? Wann exportieren wir?
Wenn Sie im obigen FOO
Beispiel ein anderes Programm ausführen, wird die FOO
Variable nicht angezeigt, da sie nicht exportiert wird. Es lebt nur innerhalb dieser einen Shell-Instanz:
$ echo $FOO
bar
$ bash
$ echo $FOO
$ exit
$ export FOO
$ bash
$ echo $FOO
bar
Wenn ich zum ersten Mal eine neue bash
Shell unter der bereits verwendeten ausführe und dann versuche, den Wert von FOO
anzuzeigen, wird ein Leerzeichen angezeigt, da FOO
es nicht exportiert wurde, damit Unterprogramme es sehen können. Dann habe ich die zweite bash
Instanz beendet, exportiert, bash
erneut ausgeführt, und jetzt sieht die zweite Instanz den Wert von FOO
.
Sie verwenden diese Option, export
wenn Unterprogramme die in der Shell festgelegten Werte anzeigen sollen, und verwenden sie nicht, wenn dies nicht geschehen soll.
Normalerweise exportiere ich keine temporären Variablen in Shell-Skripten, da ich nicht möchte, dass sie das Verhalten von Programmen ändern, die von diesem Shell-Skript ausgeführt werden.
Ich werde keine Ihrer anderen Fragen beantworten. Sie sollten immer nur eine Frage stellen. Ich habe nur so viele beantwortet, weil sie vage verwandt sind. Alles andere gehört in eine separate Frage.