Was ist die PATH
unter 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 passiert unter der Haube. Ich habe auch keine relevante Seite in Wikipedia gefunden.
Was ist also der Zweck von PATH
und was ist der Unterschied zwischen /etc/paths
und ~/.bash_profile
**?
Zum Beispiel in meinem paths
Datei, ich sehe dies:
/usr/bin /bin /usr/sbin /sbin /usr/local/bin
Aber in meiner ~/.bash_profile
, Ich sehe dies:
# 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 zur paths
-Datei? Was? „ist all das Zeug in paths
, wie /usr/bin
?
Kommentare
- Bitte ‚ kombinieren Sie nicht mehrere Fragen in einem einzigen Beitrag. Jede Ihrer Fragen wäre hier separat willkommen, aber nicht alle zusammen so. Bitte reduzieren Sie dies auf eine einzige Frage. Sie könnten 1 und 2 kombinieren, aber die anderen haben nichts speziell mit PATH zu tun. 3 wird beantwortet hier 4 wird erklärt hier und 5 macht nicht viel Sinn I ‚ Ich habe Angst. Ihre Bonusfrage lautet auch nicht: Welche Dateien sind binär? Skripte sind nicht.
- Ich habe meine Frage nach unten bearbeitet. Außerdem fand ich diese Links hilfreich. Vielen Dank.
Antwort
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 eine anzugeben expliziter Pfad zu ihnen (wie in Ihrem Beispiel jsdoc
). Wenn Ihre PATH
/usr/bin:/bin:/home/bin
hat, wird in diesen Verzeichnissen nach jeder ausführbaren Datei gesucht, die Sie beim Namen aufrufen (in dieser Reihenfolge) und die erste gefundene ausführbare Datei ist die ausgeführte.
2. Was ist der Unterschied zwischen / etc / path und ~ / .bash_profile
Laut dieser Frage ServerFault , /etc/paths
wird verwendet, um PATH
global (dh systemweit für alle Benutzer) festzulegen, während ~/.bash_profile
wird verwendet, um Einstellungen pro Benutzer festzulegen (wobei ~
das Ausgangsverzeichnis des Benutzers ist). Was in kann entweder zum globalen PATH
von /etc/paths
hinzufügen oder es vollständig überschreiben.
Für Der Datensatz /etc/paths
scheint eine Besonderheit des MAC-Betriebssystems zu sein: Ich bin zumindest unter GNU / Linux nicht darauf gestoßen.
Kommentare
- Ich habe sie gerade bearbeitet, aber danke, dass Sie alle beantwortet haben!
- @ggundersen Ich habe meine Antwort auf Ihre bearbeitete Frage zugeschnitten.
- @ggundersen Vielleicht möchten Sie auch meine Antwort und th lesen Die darin enthaltenen Links zu
/etc/paths
unter OSX.
Antwort
Was ist der Zweck von PATH?
So ist Ihre shell findet Programme. Wenn Sie beispielsweise ls
eingeben, wird ein Programm namens ls
ausgeführt, das in /bin
auf den meisten Systemen, einschließlich Mac OS X. Ihre Shell kann dies nur finden, weil /bin
in PATH
enthalten ist.
Die Shell sucht nach Programmen in der Reihenfolge PATH
von links nach rechts. Wenn sich auf Ihrem System zwei ls
-Programme befinden und sich beide Verzeichnisse in Ihrem PATH
befinden, wird das Programm im aufgelisteten Verzeichnis gefunden zuerst in Ihrem PATH
.
Was ist der Unterschied zwischen / etc / path und ~ / .bash_profile
In /etc/paths
festgelegte Pfade werden zu PATH
um hinzugefügt Der Start in allen Shells unter Mac OS X.
~/.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 — Mac OS X liefert daher auch tcsh
und zsh
. Beispiel: — Änderungen an /etc/bashrc
gelten nicht für Ihre neue Shell.
Außerdem ist /etc/paths
eine Konfigurationsdatei auf Systemebene, während ~/.bash_profile
pro Benutzer ist. Wenn Sie mehrere interaktive Benutzer auf Ihrem Mac eingerichtet hätten, möchten Sie /etc/paths
keine Verzeichnisse hinzufügen, die nicht in allen . Gleiches gilt für /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 nur das Variable ohne Siegel, wenn Sie die Variable festlegen. FOO=bar
setzt die Umgebungsvariable FOO
auf die Zeichenfolge bar
. Wenn Sie set
eingeben, zeigt die Shell alle Umgebungsvariablen an. In diesem Fall wird die Variable auch ohne Siegel angezeigt.
$PATH
und ${PATH}
sind normalerweise austauschbar. Sie weisen die Shell an, die aktuelle Variable PATH
zu erweitern. “ s Wert an Ort und Stelle. Der Unterschied hängt damit zusammen, wie und wo Sie sie verwenden. Beispiel:
$ FOO=bar $ echo $FOO bar $ echo $FOOx $ echo ${FOO}x barx
Im zweiten echo
-Befehl druckt die Shell nichts, da die Shell zum Drucken aufgefordert wird Eine Variable namens FOOx
, die nicht existiert. Die Shell behandelt nicht vorhandene Variablen als leer. Da die dritte echo
die geschweifte Klammer-Syntax verwendet Dadurch kann die Shell sehen, dass Sie die Variable FOO
anfordern und dass die Variable 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 erweitert doppelte Anführungszeichen und die Anführungszeichen trennen das x
von der Variablenerweiterung, damit die Shell das Richtige tut.
Ich verwende das FOO
Umgebungsvariable hier nur aus Gründen der Übersichtlichkeit. Alles, was ich oben geschrieben habe, gilt genauso gut für , da es sich nur um eine andere Umgebungsvariable handelt. Die Beispieltexte wären nur viel länger.
Was bedeutet Export PATH? Wann exportieren wir?
Nehmen Sie das obige FOO
Beispiel, wenn Sie ein anderes Programm ausführen möchten Die Variable FOO
wird nicht angezeigt, da sie nicht exportiert wird. Sie befindet sich nur in 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, versuche ich, den Wert von FOO
, I anzuzeigen Holen Sie sich ein Leerzeichen, da FOO
nicht exportiert wurde, damit Unterprogramme es sehen können. Dann habe ich die zweite bash
-Instanz beendet, sie exportiert, bash
erneut ausgeführt, und jetzt sieht die zweite Instanz den Wert von FOO
.
Sie verwenden export
, wenn Unterprogramme die in der Shell festgelegten Werte anzeigen sollen, und verwenden Sie sie nicht Wenn Sie nicht möchten, dass dies geschieht.
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 jeweils nur eine Frage stellen. Ich habe nur so viele beantwortet, weil sie vage verwandt sind. Alles andere gehört in eine separate Frage.