Wie führe ich Skripte aus, ohne den vollständigen Pfad einzugeben?

57

Ich würde gerne wissen, ob es eine Möglichkeit gibt, ein Programm / Shell-Skript auszuführen, ohne den vollständigen Pfad einzugeben:

/opt/idea/bin/idea.sh
Poorman_Patrick
quelle
Sie können immer den vollständigen Pfad der Datei angeben.
muru
Vielen Dank an @muru, das weiß ich, aber es ist ein Programm, das ich oft benutze, deshalb möchte ich es mit einem einfachen Befehl ausführen können, nicht mit einem langen Dateipfad.
Jonny
nufailm.blogspot.com/2012/05/… das hilft für die Idee :)
dedunumax

Antworten:

60

Sie können einfach einen Symlink erstellen . Erstellen Sie es in /usr/local/bin. Alles was Sie brauchen, ist das Kommando auszuführen:

sudo ln -s /full/path/to/your/file /usr/local/bin/name_of_new_command

Danach solltest du deine fileausführbare Datei machen:

chmod +x /full/path/to/your/file

Jetzt sollten Sie name_of_new_commandjederzeit in Ihrem Terminal ausgeführt werden können.

Beachten Sie, dass dies nur für den Heimgebrauch von Linux eine gute Lösung ist.

c0rp
quelle
11
Beachten Sie, dass Sie keinen Symlink einfügen sollten /usr/local/bin, der auf ein Skript in einem privaten Basisordner verweist /home/jack/myscript.sh, da jackdies normalerweise nur von einem Benutzer ausgeführt werden kann. Der Symlink ist für andere Benutzer sichtbar, jedoch nicht für die Datei, auf die er verweist. Auf einem Einzelbenutzersystem ist dies möglicherweise nicht wichtig, es ist jedoch eine "gute Praxis", Skripte (oder Links zu Skripten), die alle Benutzer einlesen können /usr/local/bin, und private, selbst erstellte Skripte (oder Links zu Skripten) von zu platzieren ein einzelner Benutzer in ihrem ~/binOrdner.
Malte Skoruppa
Füge einen Symlink in / usr / sbin / hinzu und mache ihn von überall zugänglich
Seyfi
28

Sie können /opt/idea/binIhrer PATHVariablen hinzufügen :

PATH=/opt/idea/bin:"$PATH"

Danach können Sie es einfach mit ausführen idea.sh.

Sie möchten diese Zeile wahrscheinlich in Ihre ~/.bashrcDatei einfügen.

janos
quelle
2
Außerdem: Wenn Sie das Skript ausführbar machen, kann die Erweiterung .sh weggelassen werden (vorausgesetzt, Sie verwenden den Shebang oben im Skript). dann reicht einfach "idee".
Jacob Vlijm
1
@Jacob: Sie können die Erweiterung nicht weglassen, da dies Teil des Dateinamens der ausführbaren Datei ist (dies ist nicht Windows, wo Magie wie diese andere Probleme verursacht). Um das Skript mit dem Namen aufzurufen idea, müssten Sie einen Link oder Alias ​​mit diesem Namen erstellen, der auf das idea.shSkript verweist .
Jonathan Callen
2
@ JonathanCallen Callen können Sie auf jeden Fall! Um das Skript ausführbar zu machen, entfernen Sie die Erweiterung .sh sowohl aus dem Dateinamen als auch aus dem auszuführenden Befehl, da Sie das Skript mit der Zeichenfolge #! / bin / bash starten.
Jacob Vlijm
1
@Jacob was ich meine ist, ohne die Datei umzubenennen , können Sie nicht (und es scheint, dass dies Teil eines größeren Software-Pakets ist, so sollten Sie nicht nur Dateien umbenennen)
Jonathan Callen
2
Vielen Dank an @Jacob. Es wird "Wenn Skripte in einem Verzeichnis im Systempfad installiert werden" angezeigt . Das idea.shSkript ist kein solches Skript. Das Verschieben außerhalb des Installationsverzeichnisses wird nicht unterstützt. Die Debian-Verpackungsregeln gelten hier nicht.
Janos
15

Sie können eine Funktion erstellen in ~/.bashrc:

some-name () {
    /path/to/your/file
    # or:
    #cd /path/to/your
    #./path
}

Oder Sie können ein erstellen alias:

alias some-name='/path/to/your/file'
# or  
#alias some-name='cd /path/to/your/; ./file'

In beiden Fällen können Sie es ausführen, indem Sie Folgendes aufrufen:

$ some-name

Wenn die Datei nicht davon abhängt, wo sie ausgeführt wird, sollten Sie sie zu Ihrer hinzufügen ~/bin:

mkdir -p ~/bin
cp /path/to/you/file ~/bin
# or mv /path/to/you/file ~/bin
# or ln -s /path/to/you/file ~/bin

~/binWenn es existiert, wird es $PATHautomatisch zu Ihrem hinzugefügt . Dann rufen Sie direkt an file:

$ file

(Falsche Wahl des Namens. Nennen Sie ihn weniger allgemein.)

muru
quelle
@Oli gib mir immer die fünf Minuten, ich neige dazu, Einrückungen hinzuzufügen. :) Es ist nur ärgerlich, da ich den Editor dazu bringen muss, Strg-K für Einrückungen der zweiten Ebene zu verwenden.
muru
2
+1 insbesondere für die Lösung des Hinzufügens filezu Ihrem ~/bin, was ich normalerweise mache (für längere Skripte). Ich hätte wahrscheinlich sogar das oben gesetzt :) Aliase sind gut für Verknüpfungen zu Befehlen mit bestimmten Parametern, z alias l='ls -CF'. Obwohl ich viel mehr fantastische Verwendungen von Aliasen gesehen habe . Ich neige nicht dazu, Funktionen in zu deklarieren ~/.bashrc(ich bevorzuge es, alle meine Skripte in separaten Dateien zu organisieren ~/bin). Obwohl das alles Geschmackssache ist, denke ich :)
Malte Skoruppa
@MalteSkoruppa Ich habe nur die Methoden bevorzugt, die sich am einfachsten eignen cd, da das Skript möglicherweise vom Arbeitsverzeichnis abhängt. :) Ansonsten neige ich ja dazu, Dateien in ~/binmich selbst zu legen .
muru
10

Sie können einen Launcher mit dem folgenden Befehl erstellen:

gnome-desktop-item-edit --create-new <path-where-to-save>. Ich werde dieses Fenster nicht öffnen.

Bildbeschreibung hier eingeben

Benennen Sie es nach Belieben und geben Sie Folgendes in das Befehlsfeld ein

sh -c '/opt/idea/bin/idea.sh' und speichern Sie es.

Jetzt können Sie diese Datei mit dem neu erstellten Launcher ausführen

ODER

Sie können eine .desktop-Datei mit folgendem Inhalt erstellen

[Desktop Entry]
Name=<whatever-you-want>
Exec=sh -c '/opt/idea/bin/idea.sh'     
Terminal=false
Type=Application
Icon='<path to an icon file if you want>'

Speichern Sie es nun mit der .desktopErweiterung an einem beliebigen Ort.

Machen Sie es mit diesem Befehl ausführbar chmod a+x <your-desktop-file>

Doppelklicken Sie jetzt, um es zu öffnen.

g_p
quelle
7

Wir können eine Funktion definieren und einen Hotkey hinzufügen, indem wir den bindBefehl verwenden, um das aufzurufen. Öffne die ~/.bashrcDatei und füge diese Zeile hinzu:

# define function that opens your program in working directory
Openprog(){
    /your-Program/path/here
}

# bind hotkey to it (<F12>)
bind -x '"\e[24~":"Openprog"'

Wenn Sie jetzt drücken F12, wird Ihr Programm gestartet.

Hinweis: So ermitteln Sie schnell den Escape-Code:

Öffnen Sie Ihr Terminal und drücken Sie Ctrl+ V. Drücken Sie nun Ihre bevorzugte Tastenkombination. Der richtige Escape-Code sollte angezeigt werden. So stellen Sie sicher ersetzen ^[mit \evor der Zugabe der Verknüpfung, zum Beispiel zu ersetzen ^[[24~mit \e[24~.

αғsнιη
quelle
7

Wir können die /opt/idea/bin/idea.shDatei auch direkt mit ausführenbash_aliases

Öffnen Sie die ~/.bashrcDatei mit,

gedit ~/.bashrc

Entfernen Sie die #vor den Linien und speichern Sie es, so dass die Linien aussehen,

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

Jetzt ~/.bash_aliasesDatei öffnen ,

gedit ~/.bash_aliases

Fügen Sie die folgenden Zeilen in die Datei ein und speichern Sie sie.

alias idea='cd /opt/idea/bin && sudo ./idea.sh'

Schließlich Quelle der ~/.bashrcDatei,

source ~/.bashrc

Jetzt können Sie die /opt/idea/bin/idea.shDatei direkt ausführen , indem Sie

idea
Avinash Raj
quelle
4

Überlegen Sie sich zusätzlich zu den anderen guten Antworten, ob Sie eine Verknüpfung ~/.local/binzu Ihrem PATH herstellen und dieses Verzeichnis hinzufügen möchten ( .bashrcz. B. von Ihrem aus). Für diese Methode sind keine speziellen Berechtigungen erforderlich (im Gegensatz zum Beispiel zum Verknüpfen mit /usr/local/bin). Auf diese Weise haben Sie möglicherweise eine Standardverzeichnisstruktur, ohne Ihr $ HOME zu überfluten. Weitere Informationen hierzu finden Sie unter den folgenden https://unix.stackexchange.com/-Fragen :

abstrus
quelle
1

Erstellen Sie einen Softlink in /usr/bindirecotyr:

ln -s /usr/bin/idea.sh  /opt/idea/bin/idea.sh

Führen Sie es jetzt mit:

idea.sh
J.Franks
quelle
0

Oder Sie können einfach verwenden

nano ~/.bashrc

und hinzufügen

PATH=/full/path/to/file:"$PATH"

Am Ende speichern und beenden. Anschließend können Sie einfach den Dateinamen eingeben.

Helfen Sie dem Neuling
quelle
0

Ich habe alle Antworten hier und an anderen Stellen befolgt und so wenige erwähnen dies nicht, dass Sie sich möglicherweise abmelden müssen, damit der Befehl schließlich funktioniert.

Um es noch einmal zusammenzufassen, insbesondere für Xubuntu , aber auch für andere Debian / Ubuntu- Varianten, habe ich diese einfachen Anweisungen geschrieben.

(In den folgenden Anweisungen verwenden wir das Verzeichnis ~ / bin , da dies automatisch ein Ort ist, an dem diese Betriebssysteme nach Befehlen suchen. Siehe hier :

Narrensichere Anweisungen, um Ihren Befehl zum Laufen zu bringen:

# Open Terminal with Ctrl + Alt + T (or your system's own shortcut)

# You'll work in your home folder, no need to use sudo for any of this

cd # Go to home directory

mkdir -p bin # Create folder ~/bin if it doesn't exist

# Be careful not to type /bin, that's the bin folder in system root: /

sudo apt install nano # Skip this if you have Nano installed

nano bin/yournewcommand

    # In Nano, type:

    printf "Your new command works! \n" # \n means line break

    # Ctrl+X To leave Nano

    # Ctrl+Y To save the unsaved file

    # Enter to confirm

chmod +x bin/yournewcommand

yournewcommand # If you just created the bin folder, this command might not yet work.

# You must now log out and log back in to make the bin folder noticed (I think)

yournewcommand # Now it works! (You can use Tab to autocomplete the command you're typing)

# If you add a second file/command, it should work without logging out (at least in my tests)
Manu Järvinen
quelle