Was ist der Unterschied zwischen "echo $ PATH" und / etc / path?

10

Wenn ich $ PATH wiedergebe, erhalte ich Folgendes : Users/myusername/.node_modules_global/bin:/Users/mac/.node_modules_global/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/mac/Library/Android/sdk/platform-tools:/platform-tools.

Ich möchte einige Pfade daraus entfernen, aber wenn ich die Datei mit dem Befehl öffne vim /etc/paths, erhalte ich die folgenden Ergebnisse:

/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin

Unterscheidet sich die Datei / etc / path von der Variablen $ PATH?

level0
quelle
Welche Version von OS X? Ich habe nicht /etc/pathsin meinem, aber ich renne 10.4.11und die Dinge haben sich wahrscheinlich seitdem geändert
Fox
1
Aber nach einer Antwort auf AskDifferent , /etc/pathswird verwendet , um die Standardeinstellung zu generieren $PATH, die Sie später ändern können
Fox
Es ist die Standardeinstellung. Wenn der Benutzer seine Shell startet, wird sie jedoch von anderen Dateien geändert, die Shell-Quellen enthalten, wie ~/.bashrcoder~/.profile
Sergiy Kolodyazhnyy,

Antworten:

13

/etc/pathsist Teil dessen, was zum Einrichten von $PATHShell-Prozessen verwendet wird. Wenn Sie ein neues Terminalfenster öffnen, wird es gestartet bash, in dem mehrere Startskripte ausgeführt werden: /etc/profileAND ~/.bash_profileOR (falls nicht vorhanden) ~/.bash_loginOR (falls nicht vorhanden) ~/.profile. Diese Skripte richten die Shell-Umgebung ein, einschließlich $PATH.

Eines der Dinge /etc/profileist das Ausführen /usr/libexec/path_helper, das /etc/pathsalle Dateien liest und /etc/paths.dihren Inhalt hinzufügt $PATH. Dies ist jedoch nur ein Ausgangspunkt; Ihr eigenes Startskript (falls vorhanden) kann es ergänzen $PATH, bearbeiten, vollständig ersetzen usw.

Es sieht für mich so aus, als würde Ihr Startskript (und / oder die Dinge, die es ausführt) dem Basissatz, aus dem es stammt, eine Reihe von Einträgen hinzufügen /etc/paths. "Users / myusername / .node_modules_global / bin: /Users/mac/.node_modules_global/bin:" wird am Anfang von hinzugefügt $PATH(dh diese Verzeichnisse werden zuerst durchsucht) und ": / Users / mac / Library / Android / sdk / platform-tools: / platform-tools "wird am Ende hinzugefügt. Wenn Sie genau wissen möchten, was sie hinzufügt, müssen Sie sich Ihr Startskript ansehen.

Übrigens gilt dieser Vorgang zum Einrichten $PATHnur für Bash-Login-Shells. Alles, was von einer Bash-Shell ausgeführt wird, wird davon erben $PATH, also haben Sie wahrscheinlich im Wesentlichen dasselbe. Bash-Nicht-Login-Shells folgen einem etwas anderen Einrichtungsprozess. Andere Shells und Dinge, die überhaupt nicht von einer Shell aus gestartet wurden (z. B. Cron-Jobs), können völlig anders sein $PATHs.

Gordon Davisson
quelle
Beachten Sie, dass für Nicht-Login-Shells (z. B. /usr/local/bin/bashwie von installiert brew, ohne das -lArgument) /usr/libexec/path_helperkeine Shells verwendet werden und /usr/local/binstandardmäßig nicht in der enthalten sind $PATH. Zur Verwendung path_helperin einem Skript oder interaktiv lautet der Befehl eval $(/usr/libexec/path_helper).
Kyle Strand
0

Die ersten Stellen, an denen ich nach Änderungen suchen würde, sind:

~/.profile
~/.bashrc
~/.bash_profile

Wenn Sie etwas verwenden, das nicht Bash ist, überprüfen Sie die Konfigurationsdateien, um festzustellen, ob PATH erwähnt wird.

rovr138
quelle