GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie füge ich einen Pfad zu Pfad richtig hinzu?

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 wenn PATH enthält Leerzeichen oder [*? .

Also in Shells wie dash, export PATH=~/opt/bin:$PATH setzt 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).

Siehe auch:Centos – Warum wird nicht die richtige neue Version von Node.js auf CentOS 7 installiert?

¹ 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.


Linux
  1. So fügen Sie mehrere Hosts in phpMyAdmin hinzu

  2. So fügen Sie Benutzer zu einer Gruppe in Linux hinzu

  3. Wie fügt man sauber zu $path hinzu?

  4. So exportieren Sie DBUS_SESSION_BUS_ADDRESS

  5. ldd findet keinen Pfad, wie man hinzufügt

So fügen Sie ein Verzeichnis zu PATH in Linux hinzu

So fügen Sie ownCloud 9 externen Speicher hinzu

So fügen Sie ein Verzeichnis zu PATH in Linux hinzu [Kurztipp]

So fügen Sie eine Route unter Linux hinzu

So fügen Sie eine Auslagerungsdatei unter Ubuntu 20.04 hinzu

Linux:Fügen Sie PATH ein Verzeichnis hinzu