Hinzufügen eines neuen Eintrags zur PATH-Variablen in ZSH

185

Ich verwende zsh und versuche, /home/david/pear/binder PATHVariablen einen neuen Eintrag ( ) hinzuzufügen , aber ich weiß nicht wie.

Was mich am meisten verwirrt, ist, dass PATHmeine ~/.zshrcDatei keinen einzigen Verweis auf eine Variable enthält, sondern Folgendes echo $PATHzurückgibt:

/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

Also PATHwird irgendwo eine Variable gesetzt.

David Barreto
quelle

Antworten:

204

Fügen Sie diese Zeile hier hinzu zu .zshrc:

export PATH=/home/david/pear/bin:$PATH

BEARBEITEN : Dies funktioniert, aber die Antwort von ony unten ist besser, da es die strukturierte Schnittstelle nutzt, die ZSH für Variablen wie bereitstellt $PATH. Dieser Ansatz ist Standard für bash, aber meines Wissens gibt es keinen Grund, ihn zu verwenden, wenn ZSH bessere Alternativen bietet.

Linuxios
quelle
29
haha vergiss es, ich dachte, das war nur ein Konsolenbefehl, aber das Hinzufügen dieser Zeile zur .zshrc hat den Trick getan. Vielen Dank!
David Barreto
1
Meine .zshrc hatte bereits eine Zeile für den Export von PATH, daher habe ich sie durch die geänderte ersetzt.
Zack Huston
5
Ich musste die doppelten Anführungszeichen um die Einträge entfernen, dh PATH="/home/david/pear/bin:/usr/bin:etc"damit PATH=/home/david/pear/bin:/usr/bin:etces in zshrc bleibt.
a7omiton
3
@taco, können Sie $ HOME
Mencargo
1
@ DanielSpringer: Ja. Wenn Sie eine Shell öffnen, die sie PATHvon dem übergeordneten Prozess erbt , der sie gestartet hat, und wenn sie dann ausgeführt wird .zshrc( .bashrcoder was auch immer), können Sie diesem Pfad zusätzliche Dinge hinzufügen.
Linuxios
213

Mit ZSH können Sie eine spezielle Zuordnung von Umgebungsvariablen verwenden. Sie können also einfach Folgendes tun:

# append
path+=('/home/david/pear/bin')
# or prepend
path=('/home/david/pear/bin' $path)
# export to sub-processes (make it inherited by child processes)
export PATH

Für mich ist das eine sehr nette Funktion, die auf andere Variablen übertragen werden kann. Beispiel:

typeset -T LD_LIBRARY_PATH ld_library_path :
nur
quelle
16
Gute Antwort. In meinem Fall ~/.zshrcwird nach beschafft .profileund überschreibt alles in .profile. Es dauerte eine Weile, bis ich an meinen Haaren gezogen hatte, um es herauszufinden.
Khanh Nguyen
1
Der Anhängefall benötigt keine Parens, es sei denn, Sie fügen mehr als ein Element hinzu. Oft braucht es auch keine Anführungszeichen. Der einfache, kurze Weg zum Anhängen ist also
Micah Elliott
1
@SuperUberDuper, Sie sollten verstehen, dass fast jede Unix-Shell einfach Startdateien liest, die fast das Gleiche tun, als würden Sie sie interaktiv in die Shell eingeben. In Bezug auf "rc" -Dateien finden Sie möglicherweise eine interessante Antwort auf diese Frage
nur am
5
Es ist möglich, expliziten Export mit zu vermeiden -xund nur eindeutige Werte in einer Variablen mit -Utypeset -TUx PATH path
Trauer
2
@ DanielSpringer, nein. Wenn Sie es in diesen Begriffen möchten, dann: path=(...)(ohne Referenzierung $pathoder $PATHinnerhalb) path=(... $path)Zuweisen , Voranstellen und path+(...)Anhängen.
Nur
38

Sie können auf PATHminimale Weise an Ihre anhängen . Klammern sind nicht erforderlich, es sei denn, Sie fügen mehr als ein Element hinzu. Es braucht normalerweise auch keine Anführungszeichen. So kurzer Weg zum Anfügen der einfachen, ist:

path+=/some/new/bin/dir

Gemeinsame Nutzung

Dann lautet das übliche Muster zum Testen eines neuen Skripts / einer neuen ausführbaren Datei:

path+=$PWD/.
# or
path+=$PWD/bin

Diese Kleinbuchstaben-Syntax wird pathals Array verwendet , wirkt sich jedoch auch auf das Partneräquivalent in Großbuchstaben aus PATH(über das sie "gebunden" ist typeset).

(Beachten Sie, dass kein Nein :als Trennzeichen benötigt / gewünscht wird .)

Verwandte Leckerbissen

pathDiese Behandlung (als Array) bedeutet auch: Sie müssen a nicht rehash ausführen, um die neu gefundenen Befehle zu finden.

Betrachten Sie vared pathauch eine dynamische Möglichkeit zum Bearbeitenpath und andere Dinge.

Sie interessieren sich vielleicht nur pathfür diese Frage, aber da es sich um Exporte und Arrays handelt, beachten Sie, dass Arrays im Allgemeinen nicht exportiert werden können.

Sie können sogar verhindern, PATHdass doppelte Einträge übernommen werden (siehe dies und das ):

typeset -U path
Micah Elliott
quelle
Sollte es nicht 'path + =: / foo / bar' sein? (mit einem Doppelpunkt)
Andrew Lorien
1
@andrewlorien Ich habe die Antwort mit Details zum Doppelpunkttrennzeichen aktualisiert.
Micah Elliott
Beachten Sie, dass wir, wenn nach dem Pfad ein Kommentar steht, Anführungszeichen benötigen, wie z path+='my/path' # for fun. Es ist offensichtlich, wenn Sie Leerzeichen haben, aber nicht so sehr, wenn Sie Kommentare haben.
Franklin Yu
"(Beachten Sie, dass no: als Trennzeichen benötigt / gewünscht wird.)" Dies gilt nur für Kleinbuchstaben path. Ein Vorgänger :ist erforderlich für PATH, wie in .zshrc PATH+=:/Users/path/to/my/folder
Emmett R.
36

ein Liner, ohne ~/.zshrcDatei zu öffnen

echo -n 'export PATH=~/bin:$PATH' >> ~/.zshrc

oder

echo -n 'export PATH=$HOME/bin:$PATH' >> ~/.zshrc

Um den Effekt zu sehen, gehen Sie source ~/.zshrcauf dieselbe Registerkarte oder öffnen Sie eine neue Registerkarte

Siva Praveen
quelle
1
Arbeitete perfekt unter OSX mit Zsh-Shell.
Stryker
1
Lief wie am Schnürchen!
Akbar Sha Ebrahim
13

OPTION 1: Fügen Sie diese Zeile zu ~ / .zshrc hinzu:

export "PATH=$HOME/pear/bin:$PATH"

Danach müssen Sie ausführen, source ~/.zshrcdamit Ihre Änderungen wirksam werden. ODER schließen Sie dieses Fenster und öffnen Sie ein neues

OPTION 2: Führen Sie es in der Terminalkonsole aus, um diesen Pfad nur zur aktuellen Terminalfenstersitzung hinzuzufügen. Wenn Sie das Fenster / die Sitzung schließen, geht es verloren.

Dimitar
quelle
Können Sie näher erläutern, wie sich diese Antwort von der vor 5 Jahren veröffentlichten Antwort unterscheidet ?
Franklin Yu
In dieser Antwort wird nicht gesagt, dass Sie diese Codezeile zur Datei hinzufügen müssen. Wenn Sie sie nur so ausführen, ändert sie sich nur in den aktuellen Fenstern und dies wird in der ursprünglichen Antwort nicht erklärt
Dimitar
13
  1. Pfad zu ~ / .zshrc hinzugefügt

    sudo vi ~/.zshrc

    neuen Pfad hinzufügen

    export PATH="$PATH:[NEW_DIRECTORY]/bin"
  2. Aktualisieren Sie ~ / .zshrc

    Speichern Sie ~ / .zshrc

    source ~/.zshrc

  3. Überprüfen Sie den Pfad

    echo $PATH

saneryee
quelle
2
Das ist der BashWeg.
CousinCocaine