Was ist die Unix PATH-Variable und wie füge ich sie hinzu?

11

In vielen Programmier-Tutorials werden Benutzer gebeten, etwas zu ihrem Programm hinzuzufügen, PATHaber nicht zu erklären, was es ist. Die vorhandenen Ressourcen, die PATHBenutzern erklären, die neu in der Befehlszeile sind, sind nicht sehr gut.

  • Was ist die Unix- PATHVariable?

  • Ich habe gerade ein Programm heruntergeladen, dann versucht, einen Befehl im Terminal auszuführen und bekam command not found. Was hat das mit dem zu tun PATH?

  • Ich habe PATHmit diesem Befehl etwas hinzugefügt und dann haben die Dinge funktioniert:

    export PATH=/path/to/some/bin:$PATH
    

    ... aber dann bekam ich command not foundwieder, wenn ich das nächste Mal meinen Computer startete. Wie kann ich dafür sorgen, dass es bei PATHjedem Öffnen des Terminals eingeschaltet bleibt ?

  • Wie kann gccich am besten feststellen, ob ein Programm wie Git oder bereits auf meinem Computer geladen ist?

Kevin Burke
quelle
3
Ich habe viele der Antworten auf SO gelesen und keine Antwort gefunden, die jede dieser Fragen so beantwortet, wie es ein Neuling verstehen kann. Ich möchte etwas, mit dem ich neue Befehlszeilenbenutzer verknüpfen kann. Ich hatte die Hoffnung, dies als Community-Wiki hinzuzufügen und ihm eine bedeutende Prämie beizufügen.
Kevin Burke
4
Ich wette, ich kann 50 Treffer finden, wenn ich bei Google nach dieser Frage suche. Warum kannst du nicht?
Trojanfoe
2
Und wenn keiner dieser Links auf SO für eine Frage verweist, die qualifiziert ist, hier zu sein, sollte sie hier hinzugefügt werden. Wir möchten, dass SO dort ist, wo Google Programmierfragen stellt.
In diesem MSO-Beitrag finden Sie Kevins Motivation, diese Frage zu stellen. Er wird höchstwahrscheinlich eine Änderung vornehmen, um zu klären, wie hilfreich diese Informationen sind.
jmort253
1
@ jmort253: Nun, er sollte schnell damit anfangen. 4/5 enge Stimmen. Ich werde nicht schließen, weil ich weiß, dass ich die Frage bearbeiten möchte, aber er macht es besser schnell.
Madaras Geist

Antworten:

17

Der UNIX-Pfad ist eine Umgebungsvariable, bei der es sich um eine Liste von Verzeichnissen handelt, in denen nach Programmen gesucht werden soll, die Sie ausführen möchten. So können Sie vermeiden, dass Sie den vollständigen Pfadnamen zum Ausführen von Dingen wie /bin/ls(z. B. durch Eingeben /bindes Pfads) verwenden müssen.

Ein Pfad kann beispielsweise bestehen aus:

/bin:/usr/bin:/usr/sbin

Wenn Sie also den Befehl eingeben xyzzy, wird versucht, die erste gefundene Datei aus der aktuellen Liste auszuführen:

/bin/xyzzy
/usr/bin/xyzzy
/usr/sbin/xyzzy

(Es kann nicht ausführbare Dateien überspringen, wenn es klug ist).

Sie können dem Pfad Dinge mit einem Befehl wie dem folgenden hinzufügen:

set PATH=/directory/to/add:$PATH:/low/priority/path

welche Stellen /directory/to/addam Anfang der Pfadsuchliste und /low/priority/patham Ende stehen.

Dies ändert sich jedoch normalerweise nur für die aktuelle Shell. Wenn Sie in jeder Shell eine Änderung vornehmen möchten, sollten Sie diese Zeile zu einer Ihrer Startdateien hinzufügen, z. B. $HOME/.profileoder /etc/profile. Die richtige Datei hängt von Ihrer Shell selbst und davon ab, wie Sie die Startdateien eingerichtet haben. Es ist nicht immer einfach zu sagen, wohin es gehen soll, aber die Regeln werden im Allgemeinen in der Manpage für die von Ihnen verwendete Shell erläutert.

Normalerweise finden Sie einen Befehl im Pfad mit einem der folgenden Elemente:

which cmd
whence cmd

um die cmdausführbare Datei zu finden. Auf meinem Debian-System erhalte ich beispielsweise das folgende Transkript:

pax> which ls
/bin/ls

pax> which firefox
/usr/bin/firefox

pax> which xyzzy

pax> 

quelle
1
Gehört diese Frage zum Stackoverflow?
Trojanfoe
@trojanfoe, so viel wie jede Shell-bezogene Frage, ja, ich würde es denken. Es ist auch eine Programmiersprache.
Ich habe die Antwort geändert, um sie :als Trennzeichen zu verwenden, da dies auf * nix verwendet wird. Windows verwendet ;(wahrscheinlich, weil :bereits eine Bedeutung in hat C:).
Joachim Sauer
Eigentlich, @Joachim, ist es möglicherweise richtiger zu sagen, dass eine bestimmte Shell (anstelle von UNIX selbst) ein bestimmtes Verzeichnis-Trennzeichen hat, aber Sie haben Recht für alle, die ich auf Anhieb verwende. Danke für das Update, Prost.
@paxdiablo: Ja, ich habe darüber nachgedacht, aber ich kann mir auch keine Unix-Shell vorstellen, die nicht verwendet wird :(in Java ist zum Beispiel path.separatorimmer :* nix).
Joachim Sauer
5

Was ist?

Die Umgebungsvariable PATH ist eine durch Doppelpunkte getrennte Liste von Verzeichnissen, die Ihre Shell durchsucht, wenn Sie einen Befehl eingeben.

Wie stelle ich es ein?

PATH=$PATH:/your/directory
export PATH

Wie kann ich dafür sorgen, dass es jedes Mal auf dem Pfad bleibt, wenn ich das Terminal öffne?

Fügen Sie die beiden vorherigen Zeilen ein ~/.bash_profile(wenn Sie sie bashfür das Terminal verwenden).

Pigueiras
quelle
3

PATH ist eine Umgebungsvariable für Unix-ähnliche Systeme.

Pfad festlegen:

export PATH=$PATH:<your path>

nicht festgelegter Pfad:

unset $PATH

Pfad dauerhaft einstellen

Aktivieren Sie in Ihrem Home-Ordner Ansicht -> Versteckte Dateien anzeigen .... Stift .bash_profile-Datei, bevor Sie die PATH-Zeile exportieren, fügen Sie diese Zeile hinzu .....

PATH=$PATH:<yourpath>

Abmelden und erneut anmelden ...... prüfen, ob es funktioniert ... gut! es sollte funktionieren.....

Shantanu Banerjee
quelle
1
Entschuldigung für die Ablehnung, aber diese ist schlecht formatiert und formuliert. Vermeiden Sie übermäßigen Gebrauch von Fettdruck und übermäßiger Verwendung von Auslassungspunkten ("...") und schreiben Sie vollständige Sätze. Dies sollte dazu beitragen, solche Abstimmungen in Zukunft zu vermeiden.
Joachim Sauer
1
@ Joachim Sauer, warum bearbeitest du die Antwort nicht? Warum stimmen Sie es lieber ab?
1
@MikroDel: Weil es bereits bessere, qualitativ hochwertigere Antworten auf diese Frage gibt und das Downvoting weniger Aufwand erfordert. Wenn dies die einzige Antwort wäre, hätte ich sie wahrscheinlich bearbeitet. Außerdem: Obwohl sie normalerweise keinen Spaß machen, sind Abstimmungen ein legitimes Werkzeug (ja, neben jeder Frage / Antwort befinden sich Auf- und Abwärtspfeile ).
Joachim Sauer
1
Das Bearbeiten oder Veröffentlichen dieses Kommentars
@MikroDel: Also hilft es dem Benutzer nicht, die Gründe für eine Ablehnung zu erklären? Ich denke, ich war ziemlich klar in meinen Überlegungen und habe praktische Tipps zur Verbesserung der Qualität gegeben. Das einzige, worauf Sie bestehen, verringert meine Bereitschaft, meine Abstimmungen zu erklären (und wie Sie in meinem Profil sehen können, stimme ich nicht übermäßig ab).
Joachim Sauer