Wie kann ich ein bestimmtes Programm ausführen, indem ich seinen Namen in die Konsole eingebe?

17

Ich habe Light Table erst kürzlich installiert, indem ich es aus dem Git-Repository heruntergeladen habe, und den Anweisungen auf dieser Website gefolgt , um einen Desktop-Launcher zu erstellen.

Jetzt möchte ich das Programm ausführen, indem ich direkt das Terminal eingebe

LightTable

und nicht

./opt/LightTable/deploy/LightTable
Dapias
quelle
6
@ user68186 Das Hinzufügen des enthaltenen Verzeichnisses zur PATHUmgebungsvariablen ist oft nicht der beste Weg, um dies zu erreichen, und kann manchmal sogar das System beschädigen oder Sicherheitslücken schaffen. (Man muss alle anderen ausführbaren Dateien betrachten , die in Befehle von diesem gedreht wird, sowie in dem in PATHsie aufgenommen wird .) Ein Shell - Alias hinzufügen, wie hier durch Antworten bedeckt, ist besser für alle , die nicht solche Komplexität betrachten will; es ist auch enger auf die jeweilige App zugeschnitten. Dies ist also kein Duplikat dieser Frage, obwohl sie sich ein wenig überlappen.
Eliah Kagan
Verwandte (aber nicht unbedingt ein Duplikat): Wie füge ich meinem Pfad ein Verzeichnis hinzu?
Seth

Antworten:

20

Dies kann grob mit einem Alias ​​erreicht werden. Sie können einen permanenten Bash-Alias ​​erstellen, indem Sie Ihrer .bashrcDatei eine einzelne Zeile hinzufügen .

Im Terminal laufen nano ~/.bashrc

Fügen Sie die folgende Zeile unten hinzu:

alias LightTable='/full/path/opt/LightTable/deploy/LightTable'

Beachten Sie, dass ich den vollständigen Pfad anstelle des Pfads hinzugefügt habe, .damit dies in jedem Arbeitsverzeichnis funktioniert. Schließen Sie das Terminal und öffnen Sie es erneut oder führen Sie es aus source ~/.bashrc, um die bashrc-Datei neu zu laden.

Dan
quelle
7

Dies ist keine elementare Frage. Der beste Weg, dies zu tun, ist ein Alias ​​zu erstellen. Ich verwende Netbeans als Beispiel

Öffnen Sie das Terminal Ctrl+Alt+T

nano ~/.bashrc

Schreiben Sie dies am Ende der Datei:

alias netbeans='/home/john/netbeans-7.0.1/bin/netbeans'

Ctrl + x

Y

Enter

Das Wort netbeans ist der Befehl, mit dem Sie das Programm starten. Sie können es nach Bedarf ändern. In den Anführungszeichen befindet sich der Befehl, den Sie ausführen möchten, wenn der NetBeans-Alias ​​aufgerufen wird.

Damit dieser Befehl aktiv ist, müssen Sie das Terminal erneut öffnen

Johnn
quelle
Ich kann wegen meines schlechten Rufs nicht abstimmen, aber ich danke Ihnen für die Antwort, es war sehr nützlich
Dapias
5

Sie können versuchen, die ausführbare Datei in /usr/binein einfaches ausführbares Programm zu kopieren, das von keiner anderen Datei abhängig ist. Wenn es von anderen Dateien abhängt, erstellen Sie am besten einen Verknüpfungsbefehl zum Programm.

Der Alias ​​wird von Ihnen selbst erstellt (.bashrc, .profile usw.). Ich persönlich lasse jedoch alle meine Umgebungsvariablen in meiner .bash_aliasesDatei (Sie müssen es auf den ersten Blick erstellen).

Erstellen Sie die Datei .bash_aliases in Ihrem HOME-Ordner und bearbeiten Sie sie nach Belieben. Um die Verknüpfung zu erstellen, können Sie Folgendes tun:

alias LightTable='path_to_opt/LightTable/deploy/LightTable'

Speichern Sie die Datei und das wars.

ps: Sie können den Alias ​​auch als lighttable und LIGHTTABLE setzen, falls Sie vergessen, das L in Großbuchstaben zu schreiben, oder falls die Feststelltaste versehentlich aktiviert ist, müssen Sie den Befehl nicht erneut eingeben.

Geo
quelle
Ich kann wegen meines schlechten Rufs nicht abstimmen, aber danke für die Antwort, es war sehr nützlich
Dapias
Es wird empfohlen, /usr/local/binstattdessen Dinge zu speichern, die nicht über Apt installiert wurden . Dinge in /usr/binkönnen gelöscht oder durch Apt-Pakete ersetzt werden, aber Dinge in /usr/local/binwerden in Ruhe gelassen.
Chai T. Rex
3

Ich bin nicht sicher, warum andere Antwortende dies nicht vorgeschlagen haben, aber wie das OP tatsächlich hervorhob, $PATHwäre das Voranstellen der Variablen die Art und Weise gewesen, wie ich dies erreicht hätte:

echo 'PATH=/opt/LightTable/deploy:$PATH' >> ~/.bash_profile
source ~/.bash_profile

Dann lauf mit:

LightTable
JoeNyland
quelle
Hinweis: Ich würde dann Alias LightTablezu lighttablefür einfache Bedienung: echo 'alias LightTable=lighttable' >> ~/.bash_alias && source ~/.bash_alias.
JoeNyland
2

Ich denke, es ist besser, eine symbolische Verknüpfung als einen Alias ​​zu erstellen. Ein Alias kann in Ihrer Befehlszeile Ersetzungen vornehmen, wenn Sie keine möchten. Wenn Sie einen Symlink erstellen, können Sie das Programm wie gewünscht ausführen:

sudo ln -s full_path_to_opt/LightTable/deploy/LightTable  /usr/local/bin

Dadurch wird eine Verknüpfung in / usr / local / bin (die sich bereits in Ihrem PATH befinden sollte!) Zu der Stelle erstellt, an der sich LightTable tatsächlich befindet. Beachten Sie auch, dass Sie den Symlink auch umbenennen können, wenn Sie die Großbuchstaben in "LightTable" nicht mögen:

sudo ln -s full_path_to_opt/LightTable/deploy/LightTable  /usr/local/bin/lighttable

Nur als Referenz: Wenn das Programm umständlich gestaltet ist, dh wenn es sich beschwert, keine Konfigurationsdateien oder Bibliotheken zu finden, oder was auch immer, dann ist die Erstellung eines Wrapper-Skripts möglicherweise eine nützlichere Lösung. Dazu erstellen Sie einfach eine Datei (wo immer Sie möchten) mit dem Namen "LightTable" (oder was auch immer Sie möchten):

#!/bin/sh
# Simple script to run LightTable
if ! cd full_path_to_opt/LightTable/deploy/LightTable ; then
    echo "$0: error: LightTable directory not found." >&2
    exit 1
fi
exec ./LightTable

Ändern Sie die Berechtigungen dieser Datei:

chmod 755 <wrapper_script>

und versuchen Sie es auszuführen, nur um zu sehen, ob es funktioniert, und wenn ja, verschieben Sie es nach / usr / local / bin:

sudo mv -i <wrapper_script> /usr/local/bin
Zorawar
quelle
Was du sagst ist wahr, hat aber nicht geantwortet was er wollte. Er wollte es ausführen, indem er den Namen der Datei / des Alias ​​der Datei verwendete
Johnn
1
@ Johnn: Es tut mir leid, ich verstehe nicht, was der Unterschied ist. Unter der Frage verstehe ich die Frage, wie das Programm ausgeführt werden kann, ohne dass der Pfad angegeben werden muss. Ob die Shell einen Alias ​​oder den PATH-Mechanismus verwendet, spielt keine Rolle, wenn Sie nur nach dem Ausführen des Programms fragen. Wenn Sie etwas anderes mit der Datei tun möchten, ist die Verwendung eines Alias, um den vollständigen Pfad der Datei anzugeben, in der Tat der beste Weg, aber er möchte die Datei nur ausführen. Irre ich mich
Zorawar
Nein, das war meine Schuld.
Johnn
1
@ Johnn: Ah, na ja, trotzdem danke für das kritische Auge!
Zorawar
0

Das habe ich versucht, als ich in Ubuntu angefangen habe. Wenn Sie LightTable in das Terminal stellen, wird in $PATHVerzeichnissen nach einer Datei mit dem Namen LightTable gesucht . Sie können echo $PATHdie Verzeichnisse setzen , um zu erhalten.

Wenn Sie Ihr LightTable-Programm in ausführen möchten ./opt/LightTable/deploy/LightTable, müssen Sie Ihre Light Table-Datei in platzieren. /usr/games or /usr/bin.Dafür sind jedoch Super User-Berechtigungen erforderlich

öffne das Terminal mit Strg + Alt + T

dann setzen

Ich ziehe es vor, eine Verknüpfung von LightTable mit zu erstellen

sudo ln -s path/to/LightTable  /usr/games/LightTable

Dann geben Sie das SU-Passwort ein. Dann können Sie mit auf Ihr Programm zugreifenLightTable das Terminal

Sie können /usr/binoder /usr/local/binanstelle von /usr/games, alles, was ein $PATHVerzeichnis ist, Es muss nicht so sein, aber ich empfehle Ihnen, es zu platzieren/usr/local/bin

Ich empfehle Ihnen auch, die Ausgabedatei wie lightpathfolgt zu ändernLightPath

Prashanth Sriram
quelle