Problem mit $ PATH und ausführbarer Datei


8

Ich habe eine ausführbare Unix-Datei in einem von mir generierten Verzeichnis. Ich glaube, ich muss dieses Verzeichnis in meinem Verzeichnis abrufen, $PATHdamit die ausführbare Unix-Datei ausführbar ist. In der Dokumentation zum Quellcode heißt es jedoch, dass ich meine Shell-Konfigurationsdatei bearbeiten muss, um sie $home/meme/bindem Pfad meiner Shell hinzuzufügen .

Antworten:


10

Wenn Sie ein Programm ausführen möchten, indem Sie seinen Namen in die Befehlszeile eingeben, muss sich die ausführbare Programmdatei in einem der in der PATHUmgebungsvariablen aufgeführten Verzeichnisse befinden . Sie können den aktuellen Wert der Variablen folgendermaßen sehen ( $ist Ihre Eingabeaufforderung und der folgende Wert ist ein Beispiel):

$ echo $PATH
/home/drbunsen/bin:/usr/local/bin:/usr/bin:/bin

Sie haben mehrere Möglichkeiten; Während # 1 und # 2 weniger fortgeschrittene Konzepte beinhalten, empfehle ich # 3, was in der Praxis weniger Arbeit bedeutet:

  • Sie können die ausführbare Datei in einem Verzeichnis ablegen, das sich bereits in Ihrem Verzeichnis befindet PATH. Wenn sich beispielsweise /home/drbunsen/binbereits auf Ihrem befindet PATH, können Sie die ausführbare Datei dort ablegen. Oder Sie können die ausführbare Datei einfügen, /usr/local/binwenn Sie möchten, dass sie für alle Benutzer verfügbar ist.
  • Sie können das Verzeichnis hinzufügen, in dem sich die ausführbare Datei in Ihrem befindet PATH. Bearbeiten Sie die Datei ~/.profile( ~/bedeutet, dass sich die Datei in Ihrem Ausgangsverzeichnis befindet) (erstellen Sie die Datei, falls sie nicht vorhanden ist). Fügen Sie eine Zeile wie folgt hinzu:

    PATH=$PATH:$HOME/meme/bin
    

    (Beachten Sie, dass es ist $HOME, nicht $home, Unix ist in der Regel Groß- und können Sie auch schreiben. ~/meme/bin, ~Ist ein Synonym für , $HOMEwenn es am Anfang eines Dateipfad.) Die Änderung wirksam das nächste Mal , wenn Sie sich anmelden nehmen Sie können diese eingeben. Dieselbe Zeile in einem Terminal, und dies wirkt sich auf die in diesem Terminal ausgeführte Shell und alle von diesem Terminal aus gestarteten Programme aus.

  • Der von mir empfohlene Ansatz besteht darin, die ausführbare Datei mit den anderen Dateien, die Teil des Programms sind, in einem eigenen Verzeichnis zu speichern, aber auch nicht zu ändern PATH.
    Das Beibehalten der ausführbaren Datei $HOME/memehat den Vorteil, dass sich alles an einem Ort befindet, wenn Sie das Programm jemals entfernen oder aktualisieren möchten. Einige Programme benötigen dies sogar, um die von ihnen verwendeten Dateien zu finden. Nicht ändern PATHhat den Vorteil, dass das Installieren und Deinstallieren von Programmen weniger Arbeit bedeutet.
    Um das Beste aus beiden Welten zu erhalten, erstellen Sie einen symbolischen Link in einem Verzeichnis auf Ihrem PATH, der auf die tatsächlich ausführbare Datei verweist. Führen Sie in der Befehlszeile einen Befehl wie den folgenden aus:

    cd ~/bin
    ln -s ../meme/bin/* .
    

    Das setzt voraus, dass ~/bindas schon bei Ihnen ist PATH; Wenn dies nicht der Fall ist, fügen Sie es ~/.profilewie oben angegeben hinzu. Wählen Sie einen anderen Ort, wenn Sie möchten. Wenn Sie nun Programme zur Verfügung stellen, müssen Sie die symbolischen Verknüpfungen erstellen. Wenn Sie sie nicht verfügbar machen, müssen Sie die symbolischen Verknüpfungen entfernen. Sie können leicht verfolgen, welche Programme Sie manuell installiert haben und wo sie sich befinden, indem Sie sich die symbolischen Links ansehen.


Gilles, wow, vielen Dank für die ausführliche Erklärung. Ich schätze deine Hilfe sehr. Vielen Dank, dass Sie sich die Zeit genommen haben, meine Frage ausführlich und auf einer Ebene zu beantworten, die alles kristallklar machte.
Dr. Bunsen

Eine andere Sache, die mir aufgefallen ist, ist, dass es im Verzeichnis home / meme / anscheinend kein Verzeichnis / bin gibt. Muss ich bin erstellen, damit ich hier einen symbolischen Link zu meinem erstellen kann PATH? Vielen Dank.
Dr. Bunsen

@ dr.bunsen ~/binist ein allgemeiner Speicherort, und einige Distributionen erstellen ihn automatisch. Wenn dies bei Ihnen nicht der Fall ist, müssen Sie es erstellen und PATHmanuell hinzufügen . Der Ort ~/binist nur eine Konvention, Sie können einen anderen Namen wählen, wenn Sie möchten.
Gilles 'SO - hör auf böse zu sein'

Der Platzhalterbefehl funktioniert nicht, da ln das letzte Element in der Erweiterung als Verzeichnis interpretiert: "Verwendung: ln [OPTION] ... [-T] TARGET LINK_NAME (1. Form) oder: ln [OPTION] ... TARGET ( 2. Form) oder: ln [OPTION] ... ZIEL ... VERZEICHNIS (3. Form) oder: ln [OPTION] ... -t VERZEICHNISZIEL ... (4. Form) "Um dies zu lösen, habe ich hinzugefügt" - t ./ "
adam.r

1
@ adam.r Ich schrieb ln -s ../meme/bin/* ., nicht ln -s ../meme/bin/*. Sieht so aus, als hätten Sie beim Kopieren des Befehls ein Zeichen verpasst.
Gilles 'SO - hör auf böse zu sein'
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.