Wie kann ich ein Programm von überall ausführbar machen?

76

Was kann ich tun, wenn ich ein bestimmtes Programm unabhängig von meinem aktuellen Verzeichnis ausführen möchte? Soll ich einen symbolischen Link zum Programm im /binOrdner erstellen ?

aneuryzm
quelle
5
Nein, Sie sollten die PATH-Variable der Shell verwenden.
msw
7
Ich denke, es wäre in Ordnung, einen persönlichen ~/bin/Ordner zu erstellen , THAT zu Ihrem Pfad hinzuzufügen und Symlinks in diesem Ordner zu allem zu erstellen, was von irgendwo aus ausführbar sein soll.
Frabjous
1
Sie können auch einen Alias ​​mit dem vollständigen Pfad zu der Binärdatei festlegen, die Sie ausführen möchten.
Datasmurf

Antworten:

53

Wenn Sie nur export PATH=$PATH:</path/to/file>in die Befehlszeile eingeben, wird dies nur für die Länge der Sitzung dauern.

Wenn Sie es dauerhaft ändern möchten, fügen Sie es export PATH=$PATH:</path/to/file>zu Ihrer ~ / .bashrc-Datei hinzu (nur am Ende ist alles in Ordnung).

oadams
quelle
11
Danke, es funktioniert. Denken Sie bei Neulingen wie mir daran, die spitzen Klammern <> wegzulassen. So
ähnlich
4
Fügen Sie auch nicht den Namen der Programmdatei selbst in den Pfad ein.
Olli Niemitalo
23

Die kurze Antwort lautet, dass Sie das Programmverzeichnis in Ihrem Suchpfad haben müssen, um es auszuführen, unabhängig von Ihrem Verzeichnis. Das Problem kann gelöst werden, indem Sie das Programm in einen Ordner verschieben, der sich bereits in diesem Pfad befindet, oder indem Sie dem Pfad einen neuen Ordner hinzufügen - beides funktioniert. Die beste Antwort hängt ab von:

Ist dieses Programm ein heruntergeladenes Programm, das Sie selbst aus dem Quellcode kompiliert haben?

Es ist sehr wahrscheinlich, dass es bereits einen Installationsmechanismus gibt. Führen Sie in dem Ordner, in dem Sie das Programm kompiliert haben, als Root "make install" aus.

Ist dieses Programm ein heruntergeladenes Programm, das Sie als Teil der Standardprogramme auf dem Computer zur Verfügung stellen möchten?

Es ist sinnvoll, diese Art von Anwendung in einem Standardordner abzulegen. Es ist durchaus üblich, für solche Programme Verzeichnisse wie / usr / local / bin zu verwenden. Dazu benötigen Sie Root-Zugriff.

Dies ist ein Programm, das Sie für sich selbst geschrieben haben und / oder Sie haben keine besonderen Berechtigungen auf dem Computer.

Erstellen Sie einen Ordner in Ihrem Home-Verzeichnis mit dem Namen 'bin' und platzieren Sie das Programm dort. Möglicherweise müssen Sie Ihr Anmeldeskript bearbeiten, um den vollständigen Pfad zu diesem Ordner hinzuzufügen (z. B. / usr / home / jeremy / bin).

Während Sie nur das aktuelle Verzeichnis zum Suchpfad hinzufügen könnten, müssen Sie dies mit jedem neuen Programm tun - und dies ist längerfristig mehr Arbeit.

Michael Shaw
quelle
15

Das Einfügen eines Links zu der Datei in das /binVerzeichnis ist aus mehreren Gründen nicht das Beste.

  • Wenn sich die eigentliche ausführbare Datei an einem Ort befindet, den einige Benutzer nicht sehen oder ausführen können, wird sie als fehlerhafter Link oder als fehlerhaftes Programm angesehen.
  • Das /binVerzeichnis soll für Programme reserviert werden , die für den Betrieb des Systems (Dinge wie erforderlich sind chmod, mkdirusw.).

Sie können die ausführbare Datei in /usr/bin/oder sogar platzieren (installieren) /usr/local/bin/. Natürlich haben Sie das Programm zu diesem Zeitpunkt manuell installiert. Ihre Distribution wird nicht den Überblick darüber behalten, wie es bei den anderen Programmen der Fall ist - Sie müssen es bei Bedarf manuell aktualisieren und manuell entfernen, wenn Sie möchten, dass es nicht mehr zur Verfügung steht. Außerdem müssen Sie wissen, von welchen Paketen es abhängt (es hört sich so an, als ob Sie das Programm bereits verwenden, das ist also erledigt, aber im Allgemeinen ...).

Wenn ich kein Programm einrichte, das andere Benutzer verwenden sollen, ist dies normalerweise nicht der Fall: Ich erstelle ein bin-Verzeichnis für mich in meinem Ausgangsverzeichnis und bearbeite mein Shell-Profil, um ~/bin/es meiner PATHUmgebungsvariablen hinzuzufügen . Ich finde es einfacher, den Überblick über die Programme zu behalten, die ich auf diese Weise installiert habe, da sie vom Rest des Systems getrennt sind.

Shawn J. Goff
quelle
6

Wenn Sie einen Befehl fooin dem Verzeichnis ausführen möchten, in dem sich Ihre Shell befindet, haben Sie grundsätzlich zwei Möglichkeiten:

  1. Geben Sie ./fooan der Shell-Eingabeaufforderung ein.

  2. Fügen Sie das .Verzeichnis ( .ist ein Name für "das aktuelle Verzeichnis") der PATHUmgebungsvariablen hinzu. Wie Sie dies tun, hängt von der verwendeten Shell ab:

    • Für Shells vom Typ Bourne (bash, zsh, ksh usw.), die Sie schreiben ( weitere Informationen finden Sie auf dieser Seite ):

      export PATH=$PATH:.
      
    • Für Shells vom Typ csh (tcsh, csh), die Sie schreiben ( weitere Informationen finden Sie auf dieser Seite ):

      set path = ( $path .)
      

Beachten Sie, dass 2. ein Sicherheitsrisiko auf Mehrbenutzersystemen darstellt: Stellen Sie sich vor, Sie würden ein cdVerzeichnis erstellen , /tmpund ein böswilliger Benutzer hat eine dort genannte Malware-Binärdatei erstellt ls.

Riccardo Murri
quelle
2
Ja, ich denke, Optionen zeigen Ihnen, dass Sie unter Unix Dinge tun können, die als schlechte Praxis gelten. Hinzufügen. Auf Ihrem Weg können auch andere Nebenwirkungen auftreten, die in der Regel schlecht sind.
Der Unix-Hausmeister
1

Durch das Spielen mit dem können PATHSie versehentlich schädliche Programme ausführen. Standard ist die Installation von "lokalem" Material unter /usr/local(siehe FHS , das die Verwendung von Unix festlegt: etwas veraltet, aber mit Gründen versehen). Es /usr/local/binist normalerweise PATHfür alle Benutzer bestimmt.

Meine "lokal installierten" Programme sind im $HOME/binStandardtanz enthalten ./configure --prefix=$HOME ..., gepaart mit ein paar (Bash-) Aliasen, um zB selbstgebauten Git über das System herauszusuchen (nicht überschneidende sind PATHganz am Ende zu finden.

vonbrand
quelle