Wie füge ich ein Verzeichnis zum PATH hinzu?

731

Wie füge ich ein Verzeichnis $PATHin Ubuntu hinzu und mache die Änderungen dauerhaft?

justingrif
quelle
2
help.ubuntu.com/community/EnvironmentVariables Es gibt alles, was Sie wissen müssen. Ich fand heraus, dass ein Großteil der Eingaben hier falsch war oder zumindest die Methode nicht vorgeschlagen wurde. Dies ist eine großartige Information, mit der Sie herausfinden können, wo Sie Ihre Umgebungsvariable ändern können, basierend auf dem Grund, aus dem Sie es tun, und genau, wie Sie es tun können, ohne alles zu vermasseln (wie ich es getan habe, indem ich einige der oben genannten schlechten Ratschläge befolgt habe). Bis dann und danke für all die Fische!
Bus42

Antworten:

456

Verwenden Sie ~ / .profile, um $ PATH festzulegen

Ein eingegebener Pfad .bash_profilewird nur in einer Bash-Anmeldeshell ( bash -l) festgelegt. Wenn Sie Ihren Pfad .profileeingeben, steht er Ihrer gesamten Desktopsitzung zur Verfügung. Das bedeutet, dass selbst Metacity es verwenden wird.

Zum Beispiel ~/.profile:

if [ -d "$HOME/bin" ] ; then
  PATH="$PATH:$HOME/bin"
fi

Übrigens können Sie die PATH-Variable eines Prozesses überprüfen, indem Sie sich seine Umgebung in /proc/[pid]/environansehen (ersetzen Sie [pid] durch die Zahl von ps axf). ZB verwendengrep -z "^PATH" /proc/[pid]/environ

Hinweis:

bashAls Login-Shell wird nicht analysiert, .profileob eine existiert .bash_profileoder nicht .bash_login. Von man bash:

Es sucht in dieser Reihenfolge nach ~ / .bash_profile, ~ / .bash_login und ~ / .profile und liest und führt Befehle von dem ersten aus, der vorhanden und lesbar ist.

In den nachstehenden Antworten finden Sie Informationen zu .pam_environmentoder .bashrcinteraktive Shells ohne Anmeldung. Sie können den Wert auch global für alle Benutzer festlegen, indem Sie ein Skript in die Sitzung von Display Manager einfügen /etc/profile.d/oder dieses verwenden /etc/X11/Xsession.d/, um die Sitzung von Display Manager zu beeinflussen.

ko-dos
quelle
5
Cool, das hat funktioniert. Ich habe gesehen, wo es automatisch das bin-Verzeichnis hinzufügt, wenn ich es mache, also habe ich nur das anstelle von Skripten verwendet. TY.
Justingrif
5
Auf Xbunutu wird .profile nicht ausgeführt, also habe ich es in .bashrc eingefügt und es funktioniert.
Tekumara
13
Diese Dokumentation ist sehr gut gemacht: Offizielle Dokumentation zu Umgebungsvariablen . Überlegen Sie, ob Sie es lesen möchten (ganz zu schweigen davon, dass es auf die letzte Version der Regeln aktualisiert wird, um der Umgebungsvariablen Werte hinzuzufügen).
Michele
3
Wo in .profile fügen wir den Pfad hinzu?
Vineet Kaushik
3
Ich habe immer noch keine Ahnung, wo ich meinen zusätzlichen Pfad hinzufügen soll. Ich muss das Android SDK zu meinem Pfad PATH="$HOME/bin:$PATH"hinzufügen ... Also füge ich es hinzu?
Jamie Hutber
303

Bearbeiten Sie .bashrcin Ihrem Ausgangsverzeichnis und fügen Sie die folgende Zeile hinzu:

export PATH="/path/to/dir:$PATH"

Sie müssen Ihre .bashrcoder Logout / Login-Adresse eingeben (oder das Terminal neu starten), damit die Änderungen wirksam werden. Um Ihre Quelle zu finden, geben Sie .bashrceinfach ein

$ source ~/.bashrc
Ophidian
quelle
3
Wie "beschaffen .bashrc" Sie Ihre ? Wie "starte ich das Terminal neu"?
Isomorphismen
3
In der Bash ist es einfach. .bashrc '
Ophidian
1
Ich bin davon ausgegangen, dass Sie sich in Ihrem Home-Verzeichnis befinden. da sich dort die .bashrc befindet, die Sie bearbeiten möchten.
Ophidian
21
.bashrcist nicht der richtige Ort zum Festlegen von Umgebungsvariablen. Sie sollten hineingehen .profileoder .pam_environment. Siehe mywiki.wooledge.org/DotFiles
geirha
4
@ Laotzu . .bashrcnicht .bashrc:) oder source .bashrcfür diese Angelegenheit
Znarkus
120

Der empfohlene Ort, um permanente, systemweite Umgebungsvariablen zu definieren, die für alle Benutzer gelten, ist:

/etc/environment

(Hier wird der Standard PATHdefiniert)

Dies funktioniert in Desktop oder Konsole, Gnome-Terminal oder TTY, Regen oder Sonnenschein;)

  • Drücken Sie zum Bearbeiten Alt+ F2und geben Sie Folgendes ein:

    gksudo gedit /etc/environment
    

    (oder öffnen Sie die Datei sudoin Ihrem bevorzugten Texteditor)

Führen Sie den Befehl aus, um Änderungen vorzunehmen . /etc/environment. Da diese Datei nur ein einfaches Skript ist, wird sie ausgeführt und der PATHUmgebungsvariablen der neue Pfad zugewiesen . Um zu überprüfen, führen Sie env aus und sehen Sie den PATHWert in der Auflistung.

Verbunden:

ish
quelle
6
und dann müssen Sie neu starten, damit die Änderungen wirksam werden ...
Lee
2
Genau das habe ich gebraucht. Bereitstellung eines wegwerfbaren VM-Images über Vagrant und Hinzufügen von Node und Npm zum Pfad.
Austin Pray
7
Um Änderungen vorzunehmen, führen Sie den Befehl aus. / etc / environment (yes, dot, a space und / etc / environment). Da diese Datei nur ein einfaches Skript ist, wird sie ausgeführt und der Umgebungsvariablen PATH der neue Pfad zugewiesen. Um zu überprüfen, führen Sie env aus und sehen Sie den PATH-Wert in der Liste.
WindRider
1
Ich musste rennen source /etc/environment, um die Änderungen neu zu laden
JohnnyAW
@JohnnyAW: Die Quelle entspricht dem Anfangspunkt (siehe z. B. en.wikipedia.org/wiki/Quelle_(Befehl) .
Roland Sarrazin
58

Ich denke, der kanonische Weg in Ubuntu ist:

  • erstelle eine neue Datei unter /etc/profile.d/

    sudo vi /etc/profile.d/SCRIPT_NAME.sh
    
  • dort hinzufügen:

    export PATH="YOUR_PATH_WITHOUT_TRAILING_SLASH:$PATH"
    
  • und gib ihm Ausführungserlaubnis

    sudo chmod a+x /etc/profile.d/SCRIPT_NAME.sh
    
woto
quelle
20
In der Regel ist es sicherer, den benutzerdefinierten Pfad anstelle des Anfangs an das Ende von PATH anzuhängen. Auf diese Weise wird vermieden, dass Systembefehle versehentlich durch Ihre Programme (oder die schädlichen Programme anderer Personen) ersetzt werden. Dies vermeidet auch eine Menge Verwirrung, wenn jemand anderes an Ihrem System arbeitet (oder Sie berät) und unerwartete Ergebnisse von Befehlen erhält, die Sie "ersetzt" haben.
Joe
47

Für komplette Neulinge (wie ich), die sich mit GUI besser auskennen:

  1. Öffnen Sie Ihren $HOMEOrdner.
  2. Gehen Sie zu AnsichtVersteckte Dateien anzeigen oder drücken Sie Ctrl+ H.
  3. Klicken .profileSie mit der rechten Maustaste auf und dann auf Mit Texteditor öffnen .
  4. Scrollen Sie nach unten und fügen Sie hinzu PATH="$PATH:/my/path/foo".
  5. Sparen.
  6. Melden Sie sich ab und wieder an, um die Änderungen zu übernehmen (lassen Sie Ubuntu tatsächlich laden .profile).
Dain
quelle
4
Das Bearbeiten der .profile-Datei wird nicht mehr empfohlen. Sie können diese Methode weiterhin zum Bearbeiten der Datei .pam_environment verwenden. Siehe: help.ubuntu.com/community/EnvironmentVariables
PulsarBlow
Vielen Dank, @PulsarBlow! Ich bin mir nicht sicher, was genau der Unterschied und der Nutzen ist ... Dies ist die direkte URL zu dem relevanten Abschnitt: help.ubuntu.com/community/…
20.
1
Diese Antwort führte dazu, dass sich mein System nicht mehr anmeldete, da alle Pfade überschrieben wurden. Verwenden von Ubuntu 16.04.
Frisbetarian
1
@Frisbetarian Sie müssen sicherstellen, dass Sie das $PATH:Bit hinzufügen, das die vorhandene PATH-Definition enthält
dain
@dain: Dein Kommentar hat mein Leben gerettet!
Py-ser
46

Für persistente Umgebungsvariablen, die nur bestimmten Benutzern zur Verfügung stehen. Ich kann die offizielle Ubuntu-Dokumentation nur empfehlen.

https://help.ubuntu.com/community/EnvironmentVariables

Unter Bezugnahme auf die obige Dokumentation habe ich meine Android SDK-Pfadtools folgendermaßen eingerichtet :

  1. ~/.pam_environmentDatei im Home-Verzeichnis erstellen .
  2. deren Inhalt ist PATH DEFAULT=${PATH}:~/android-sdk-linux/tools.
  3. Zusätzlicher benutzerdefinierter Benutzerpfad kann durch Trennen der Pfade mit Doppelpunkt (:) hinzugefügt werden .
  4. Dies erfordert eine erneute Anmeldung. Dies bedeutet, dass Sie sich abmelden und wieder bei der Desktop-Umgebung anmelden müssen.
Eduardo B.
quelle
1
Das ist die beste Antwort.
Paulo Coghi
26

Fügen Sie diese Zeile in Ihre ~/.bashrcDatei ein.

Es wird bezogen, wenn Sie ein Terminal öffnen

EDIT : Basierend auf die Kommentare unten, für eine allgemeinere Einstellung, die für alle Schalen gelten (einschließlich wenn du getroffen werden Alt- F2in Unity), fügen Sie die Zeile in der ~/.profileDatei. PATHSollte jedoch wahrscheinlich nicht beides tun, da der Pfad Ihrer Umgebung zweimal hinzugefügt wird, wenn Sie ein Terminal öffnen.

Ian B.
quelle
1
Eigentlich dachte ich, Sie legen den Pfad entweder $HOME/.profilefür persönliche Einstellungen oder /etc/profilefür alle Benutzer fest. Aber wenn es nur für die Bash benötigt wird, wird wohl beides funktionieren.
Marty Fried
1
Wenn Sie es einstellen ~/.bashrc, ist es nur in den von Ihnen geöffneten Terminals verfügbar. Wenn Sie beispielsweise Alt + F2 drücken und versuchen, einen Befehl in diesem Verzeichnis auszuführen, wird er nicht gefunden. Wenn Sie es in ~/.profileoder setzen ~/.pam_environment, wird es von der Gnomensitzung (oder von der DE, die Sie verwenden) geerbt. Das Anhängen von PATH in ~/.bashrchat auch den Nachteil, dass, wenn Sie / exec bash interaktiv von einer anderen interaktiven bash-Shell aus öffnen, es mehrmals angehängt wird.
Geirha
2
Ich habe mich eine Weile nicht wirklich damit befasst, also habe ich eine Suche durchgeführt, und es scheint, dass es mindestens 95 verschiedene Möglichkeiten gibt, den Pfad festzulegen, von denen die meisten hier besprochen werden . Ich habe nie herausgefunden, welches das Beste ist. Ich denke ~/.profilejedoch, dass es für persönliche Wege richtig ist; Dort fügt Ubuntu das ~/binVerzeichnis hinzu. Und ich gebe zu, dass ich die Anzahl der Wege ein wenig übertrieben habe - nur ein bisschen.
Marty Fried
1
@MartyFried, ja, um den Bot in #bash auf freenode zu zitieren: «Die überwiegende Mehrheit der Bash-Skripte, Codes, Tutorials und Anleitungen im Internet sind Mist. Sturgeon war ein Optimist. »Wenn Sie Google für Bash-Probleme verwenden, werden Sie oft viele halbwegs funktionierende Lösungen finden, bevor Sie eine gute finden. Oh und ich würde auch ~/.profilein diesem Fall mitgehen .
Geirha
1
@geirha - Ich bin damit einverstanden, dass die meisten Anleitungen im Internet im Allgemeinen wahrscheinlich Mist sind, besonders Linux, da verschiedene Distributionen oder sogar verschiedene Versionen derselben die Dinge anders machen. Normalerweise läuft es darauf hinaus, was funktioniert, aber die meisten Leute wissen nicht, dass das, was funktioniert, einfach das ist, was funktioniert, nicht unbedingt das, was richtig ist oder sogar das, was immer funktioniert. Ich versuche herauszufinden, welche der vielen Möglichkeiten tatsächlich richtig ist, weil ich es hasse, Dinge mehr als einmal zu tun - aber es ist nicht immer einfach. :)
Marty Fried
15

Fügen Sie die Zeile export PATH=/path/you're/adding:$PATHan das Ende von an, um sie systemweit festzulegen /etc/profile.

Um das Verzeichnis nur für den angemeldeten Benutzer hinzuzufügen, fügen Sie dieselbe Zeile an ~/.bash_profile.

Ennuikiller
quelle
14

Das Hinzufügen zu .bashrc wird funktionieren, aber ich denke, die traditionellere Methode zum Einrichten Ihrer Pfadvariablen befindet sich in .bash_profile, indem die folgenden Zeilen hinzugefügt werden.

PATH=$PATH:/my/path/foo
export PATH

Laut diesem Thread sieht es so aus, als ob Ubuntus Verhalten sich geringfügig von dem von RedHat und Klonen unterscheidet.

3deinfluss
quelle
1
Ich habe kein .bash_profile. Soll ich es erstellen?
Justingrif
7
Wenn Sie haben .bashrc, stecken Sie es .bashrcstattdessen. GUI-Terminals in Ubuntu sind keine Login-Shells und werden daher .bash_profilenicht ausgeführt.
1
Ich verwende keine GUI-Shell. Aber aus dem Thread oben sieht es so aus, als würde die .bashrc gut funktionieren.
Justingrif
2
Beides funktioniert, wenn Ihre Shell eine Login-Shell ist. Aber ich habe gerade den .bash_profile-Ansatz auf einem meiner Ubuntu-Rechner ausprobiert, und selbst nach dem Neustart meiner Gnome-Sitzung wurde mein .bash_profile nicht gefunden. Daher würde ich sagen, dass das Einfügen in .bashrc wahrscheinlich der richtige Weg ist, um Ubuntu zu nutzen.
3 Einfluss
3
@justingrif Nein, brauchst du nicht .bash_profile. Wenn bash kein findet .bash_profile(wenn Sie sich interaktiv anmelden), sucht .profileund verwendet es das stattdessen. Standardmäßig haben Sie ein .profileund .bashrcin Ubuntu. Und .profileist der richtige Ort, um Umgebungsvariablen zu setzen, wenn wir pam_env nicht berücksichtigen.
Geirha
10

Im Terminal cdzuthe_directory_you_want_to_add_in_the_path

echo "export PATH=$(pwd):\${PATH}" >> ~/.bashrc

Das war nicht meine Idee. Ich habe diesen Weg gefunden, um den Pfad in diesem Blog hier zu exportieren .

Vittorio Cecchetto
quelle
8
sudo vi /etc/profile.d/SCRIPT_NAME.sh

dort hinzufügen

export PATH=YOUR_PATH_WITHOUT_TRAILING_SLASH:$PATH
Jorge Castro
quelle
2
sudo nano /etc/profile.d/SCRIPT_NAME.shist einfacher für Anfänger.
Isomorphismen
1
Für Anfänger gksu gedit /etc/profile.d/SCRIPT_NAME.shist das noch einfacher.
Fouric
6

Immer wenn ich meinen Ordner mit BASH-Skripten "installiere", befolge ich das Testmuster für einen $HOME/binOrdner, der in den meisten .profile-Dateien der letzten Versionen von Ubuntu enthalten ist. Ich habe einen Test gemacht, der so aussieht

if [ -d "/usr/scripts" ]; then
   PATH="/usr/scripts:$PATH"
fi

Es funktioniert in fast 100% der Fälle und ich kann es in einem GUI-Texteditor mit einem schnellen "Alle ersetzen" ändern, falls ich mich jemals dazu entscheide, /scriptsnäher an meinen $HOMEOrdner heranzurücken. Ich habe dies in 6 Ubuntu-Installationen nicht getan, aber es gibt "immer morgen". S

BZT

Silberärmelx
quelle
6

Die empfohlene Methode zum Bearbeiten von PATHist aus der /etc/environmentDatei

Beispielausgabe von /etc/environment:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

Zum Beispiel, um den neuen Pfad von hinzuzufügen /home/username/mydir

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/username/mydir"

Starten Sie dann Ihren PC neu.


Systemweite Umgebungsvariablen

Eine geeignete Datei für Einstellungen von Umgebungsvariablen, die sich auf das gesamte System (und nicht nur auf einen bestimmten Benutzer) auswirken, ist / etc / environment. Eine Alternative besteht darin, eine Datei zu diesem Zweck im Verzeichnis /etc/profile.d zu erstellen.

/ etc / environment

Diese Datei ist speziell für systemweite Einstellungen von Umgebungsvariablen gedacht. Es ist keine Skriptdatei, sondern besteht aus Zuweisungsausdrücken, einer pro Zeile.

Hinweis: Die Variablenerweiterung funktioniert in / etc / environment nicht.

Weitere Informationen finden Sie hier: EnvironmentVariables

Benny
quelle
1
Die niedrigste Antwort, aber die richtigste. Diese Datei wird normalerweise automatisch mit Ubuntu mit dem Pfad gefüllt.
NotoriousPyro
4

Öffnen Sie Ihr Terminal, geben Sie gedit .profileFolgendes ein und fügen Sie es ein:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$PATH:$HOME/bin"
fi

 #the following line add Bin where you dont have a Bin folder on your $HOME
    PATH="$PATH:/home/mongo/Documents/mongodb-linux-i686-2.2.2/bin"

Terminal schließen und öffnen, es sollte funktionieren.

Djavier
quelle
2

Setzen Sie es auf Ihre ~/.bashrcoder eine Whatevershell, die Sie mit rc (oder einer der oben genannten ~/.profile) verwenden, UND, ~/.xsessionrcdamit es auch in X ( Außenhülle ) funktioniert.

Mikaela
quelle
1

Auch wenn Systemskripte dies nicht verwenden, sollte in allen Fällen, in denen ein Pfad (z. B. $HOME/bin) zur Umgebungsvariablen PATH hinzugefügt werden soll, dieser verwendet werden

PATH="${PATH:+${PATH}:}$HOME/bin"

zum Anhängen (anstelle von PATH="$PATH:$HOME/bin") und

PATH="$HOME/bin${PATH:+:${PATH}}"

zum Voranstellen (statt PATH="$HOME/bin:$PATH").

Dies vermeidet den falschen Doppelpunkt vor / nach, wenn er $PATHanfänglich leer ist, was unerwünschte Auswirkungen haben kann.

Siehe z. B. https://unix.stackexchange.com/questions/162891/append-to-path-like-variable-with-creating-leading-colon-if-unset

sancho.s
quelle
-1

Für Ubuntu editiere die ~/.bashrcund füge die folgende Zeile hinzu.

. ~/.bash_profile

Bearbeiten Sie dann Ihr .bash_profil nach Bedarf .....

Jorge Castro
quelle
1
Abgestimmt, weil Sie nicht erklärt haben, wie .bash_profileSie "nach Bedarf bearbeiten " können. Was genau muss ich mit dem machen .bash_profile?
Isomorphismen
4
Das ist der falsche Weg. .profileoder .bash_profilesollte Quelle .bashrc. Nicht umgekehrt.
Geirha