Was ist das PATH
in einem Mac OS? Ich habe es verwendet, um globale Befehlszeilentools zu installieren, aber die einzige Dokumentation, die ich gefunden habe, sind Tutorials, um genau das zu tun, ohne wirklich zu erklären, was unter der Haube passiert. Ich habe auch keine relevante Seite auf Wikipedia gefunden .
Also, was ist der Zweck PATH
und was ist der Unterschied zwischen /etc/paths
und ~/.bash_profile
**?
In meiner paths
Datei sehe ich beispielsweise Folgendes:
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
Aber in meinem ~/.bash_profile
sehe ich das:
# Setting PATH for Python 2.7
# The orginal version is saved in .bash_profile.pysave
PATH="/Library/Frameworks/Python.framework/Versions/2.7/bin:${PATH}"
export PATH
Ist dies nur eine benutzerspezifische Ergänzung der paths
Datei? Was ist all das Zeug in paths
, wie /usr/bin
?
Antworten:
1. Was ist der Zweck von PATH?
PATH
ist eine Umgebungsvariable , die eine durch Doppelpunkte getrennte Liste von Verzeichnissen enthält, in denen Ihre Shell nach ausführbaren Dateien sucht, die Sie in der Befehlszeile benennen, ohne einen expliziten Pfad zu diesen anzugeben (wie in Ihremjsdoc
Beispiel). Wenn also SiePATH
habenDann wird in diesen Verzeichnissen (in dieser Reihenfolge) nach jeder ausführbaren Datei gesucht, die Sie beim Namen aufrufen, und die erste gefundene ausführbare Datei ist die ausgeführte.
2. Was ist der Unterschied zwischen / etc / path und ~ / .bash_profile?
Nach dieser Frage auf ServerFault ,
/etc/paths
wird eingestellt ,PATH
global (dh systemweit für alle Benutzer) , während~/.bash_profile
auf Set pro-Benutzereinstellungen verwendet wird (wo~
wird die Home - Verzeichnis). Was in geschrieben ist,.bash_profile
kann entweder zum globalenPATH
von hinzufügen/etc/paths
oder es vollständig überschreiben.Für die Aufzeichnung
/etc/paths
scheint es eine Besonderheit des MAC-Betriebssystems zu sein: Ich bin zumindest unter GNU / Linux nicht darauf gestoßen.quelle
/etc/paths
unter OSX lesen .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 derPATH
.Die Shell sucht von
PATH
links nach rechts nach Programmen . Wenn sichls
auf Ihrem System zwei Programme befinden und sich beide in Ihrem Verzeichnis befindenPATH
, wird das Programm in dem Verzeichnis gefunden, das zuerst in Ihrem aufgeführt istPATH
.Eingestellte Pfade
/etc/paths
werdenPATH
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 ausgelieferttcsh
undzsh
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 sollenPATH
. Gleiches gilt/etc/bashrc
, außer dass dies natürlich nur für Benutzer gilt, die Bash als Shell verwenden.Normalerweise sehen Sie die Variable nur ohne Siegel, wenn Sie die Variable einstellen.
FOO=bar
Setzt dieFOO
Umgebungsvariable auf die Zeichenfolgebar
. Wenn Sie eingebenset
, 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, denPATH
Wert der aktuellen Variablen direkt zu erweitern . Der Unterschied hängt damit zusammen, wie und wo Sie sie verwenden. Beispielsweise:Im zweiten
echo
Befehl gibt die Shell nichts aus, da sie die Shell auffordert, eine Variable namens aufzurufenFOOx
, die nicht vorhanden ist. Die Shell behandelt nicht vorhandene Variablen als leer. Da der dritteecho
die geschweifte Klammer-Syntax verwendet, kann die Shell sehen, dass Sie dieFOO
Variable anfordern und dass diesx
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:
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 gutPATH
, da es sich nur um eine andere Umgebungsvariable handelt. Die Beispieltexte wären nur viel länger.Wenn Sie im obigen
FOO
Beispiel ein anderes Programm ausführen, wird dieFOO
Variable nicht angezeigt, da sie nicht exportiert wird. Es lebt nur innerhalb dieser einen Shell-Instanz:Wenn ich zum ersten Mal eine neue
bash
Shell unter der bereits verwendeten ausführe und dann versuche, den Wert vonFOO
anzuzeigen, wird ein Leerzeichen angezeigt, daFOO
es nicht exportiert wurde, damit Unterprogramme es sehen können. Dann habe ich die zweitebash
Instanz beendet, exportiert,bash
erneut ausgeführt, und jetzt sieht die zweite Instanz den Wert vonFOO
.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.
quelle