Ich frage mich, wo ein neuer Pfad zum PATH
hinzugefügt werden muss Umgebungsvariable. Ich weiß, dass dies durch Bearbeiten von .bashrc
erreicht werden kann (zum Beispiel), aber es ist nicht klar, wie das geht.
Auf diese Weise:
export PATH=~/opt/bin:$PATH
oder das?
export PATH=$PATH:~/opt/bin
Akzeptierte Antwort:
Das einfache Zeug
PATH=$PATH:~/opt/bin
oder
PATH=~/opt/bin:$PATH
abhängig davon, ob Sie ~/opt/bin
hinzufügen möchten am Ende (wird nach allen anderen Verzeichnissen durchsucht, falls ein gleichnamiges Programm in mehreren Verzeichnissen vorhanden ist) oder am Anfang (wird vor allen anderen Verzeichnissen durchsucht).
Sie können mehrere Einträge gleichzeitig hinzufügen. PATH=$PATH:~/opt/bin:~/opt/node/bin
oder Variationen der Bestellung funktionieren einwandfrei. Setzen Sie nicht export
am Anfang der Zeile, da es zusätzliche Komplikationen gibt (siehe unten unter „Hinweise zu anderen Shells als bash“).
Wenn Ihr PATH
von vielen verschiedenen Komponenten aufgebaut wird, könnten Sie mit doppelten Einträgen enden. Siehe How to add home directory path to find by Unix which command? und doppelte $PATH-Einträge mit dem awk-Befehl entfernen, um das Hinzufügen von Duplikaten zu vermeiden oder sie zu entfernen.
Einige Distributionen legen automatisch ~/bin
ab übrigens in deinem PATH, falls vorhanden.
Wohin damit
Setzen Sie die Zeile zum Ändern von PATH
in ~/.profile
, oder in ~/.bash_profile
wenn es das ist, was du hast.
Beachten Sie, dass ~/.bash_rc
wird von keinem Programm gelesen und ~/.bashrc
ist die Konfigurationsdatei interaktiver Instanzen von bash. Sie sollten keine Umgebungsvariablen in ~/.bashrc
definieren . Der richtige Ort, um Umgebungsvariablen wie PATH
zu definieren ist ~/.profile
(oder ~/.bash_profile
wenn Sie sich nicht für andere Shells als Bash interessieren). Siehe Was ist der Unterschied zwischen ihnen und welches sollte ich verwenden?
Legen Sie es nicht in /etc/environment
ab oder ~/.pam_environment
:Dies sind keine Shell-Dateien, Sie können keine Ersetzungen wie $PATH
verwenden da drin. In diesen Dateien können Sie eine Variable nur überschreiben, nicht hinzufügen.
Mögliche Komplikationen in einigen Systemskripten
Sie brauchen export
nicht wenn sich die Variable bereits in der Umgebung befindet:Jede Änderung des Werts der Variablen wird in der Umgebung widergespiegelt.¹ PATH
ist so ziemlich immer in der Umwelt; alle Unix-Systeme setzen es sehr früh (normalerweise sogar im allerersten Prozess).
Beim Login können Sie sich auf PATH
verlassen bereits in der Umgebung vorhanden ist und bereits einige Systemverzeichnisse enthält. Wenn Sie ein Skript schreiben, das möglicherweise früh ausgeführt wird, während Sie eine Art virtuelle Umgebung einrichten, müssen Sie möglicherweise sicherstellen, dass PATH
ist nicht leer und wird exportiert:wenn PATH
noch nicht gesetzt ist, dann so etwas wie PATH=$PATH:/some/directory
würde PATH
setzen nach :/some/directory
, und die leere Komponente am Anfang bedeutet das aktuelle Verzeichnis (wie .:/some/directory
).
if [ -z "${PATH-}" ]; then export PATH=/usr/local/bin:/usr/bin:/bin; fi
Hinweise zu anderen Shells als bash
In bash, ksh und zsh export
ist eine spezielle Syntax, und sowohl PATH=~/opt/bin:$PATH
und export PATH=~/opt/bin:$PATH
sogar das Richtige tun. In anderen Shells im Bourne/POSIX-Stil wie dash (das ist /bin/sh
auf vielen Systemen), export
wird als gewöhnlicher Befehl geparst, was zwei Unterschiede impliziert:
~
wird nur am Anfang eines Wortes geparst, außer in Zuweisungen (siehe How to add home directory path to be Discover by Unix which command? für Details);$PATH
außerhalb doppelter Anführungszeichen bricht wennPATH
enthält Leerzeichen oder[*?
.
Also in Shells wie dash, setzt export PATH=~/opt/bin:$PATH
PATH
in die Literalzeichenfolge ~/opt/bin/:
gefolgt vom Wert von PATH
bis zum ersten Leerzeichen. PATH=~/opt/bin:$PATH
(eine bloße Aufgabe) erfordert keine Anführungszeichen und tut das Richtige. Wenn Sie export
verwenden möchten in einem portablen Skript müssen Sie export PATH="$HOME/opt/bin:$PATH"
schreiben , oder PATH=~/opt/bin:$PATH; export PATH
(oder PATH=$HOME/opt/bin:$PATH; export PATH
für die Übertragbarkeit sogar auf die Bourne-Shell, die export var=value
nicht akzeptierte und keine Tilde-Erweiterung durchgeführt).
¹ Dies war bei Bourne-Shells nicht der Fall (wie bei der eigentlichen Bourne-Shell, nicht bei modernen POSIX-Shells), aber es ist sehr unwahrscheinlich, dass Sie heutzutage auf solche alten Shells stoßen.