
Wenn ich $PATH echoe, 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/paths von der Variable $PATH?
Antwort1
/etc/paths
ist Teil dessen, was zum Einrichten $PATH
von Shell-Prozessen verwendet wird. Wenn Sie ein neues Terminalfenster öffnen, wird gestartet bash
, das mehrere Startskripte ausführt: /etc/profile
AND ~/.bash_profile
OR (wenn das nicht existiert) ~/.bash_login
OR (wenn das auch nicht existiert) ~/.profile
. Diese Skripte richten die Shell-Umgebung ein, einschließlich $PATH
.
Eine der Aktionen /etc/profile
besteht darin, auszuführen. Dabei werden alle Dateien in /usr/libexec/path_helper
gelesen und deren Inhalt zu hinzugefügt . Dies ist jedoch nur ein Ausgangspunkt. Ihr eigenes Startskript (falls vorhanden) kann zu hinzufügen , es bearbeiten, vollständig ersetzen usw./etc/paths
/etc/paths.d
$PATH
$PATH
Für mich sieht es so aus, als ob Ihr Startskript (und/oder die Dinge, die es ausführt) dem Basissatz, den es erhält, eine Reihe von Einträgen hinzufügt /etc/paths
. „Users/myusername/.node_modules_global/bin:/Users/mac/.node_modules_global/bin:“ wird am Anfang hinzugefügt $PATH
(was bedeutet, dass diese Verzeichnisse zuerst durchsucht werden) 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 Einrichtungsprozess $PATH
nur für Bash-Login-Shells. Alles, was von einer Bash-Shell ausgeführt wird, erbt $PATH
von dieser und hat daher wahrscheinlich im Wesentlichen dasselbe. Bash-Shells ohne Login folgen einem etwas anderen Einrichtungsprozess. Andere Shells und Dinge, die überhaupt nicht von einer Shell gestartet werden (z. B. Cron-Jobs), haben möglicherweise völlig andere $PATHs
.
Antwort2
Als erstes würde ich nach Änderungen suchen,
~/.profile
~/.bashrc
~/.bash_profile
Wenn Sie etwas anderes als Bash verwenden, suchen Sie in den entsprechenden Konfigurationsdateien nach Erwähnungen von PATH.