Was ist PATH unter Mac OS?

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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.