Führen Sie ein Skript von überall aus

8

Ich habe ein Skript:

#!/bin/bash
echo "$(dirname $(readlink -e $1))/$(basename $1)"

das sitzt hier: /home/myuser/bin/abspath.shdas hat Ausführungsberechtigungen.

Wenn ich renne, echo $PATHbekomme ich folgendes:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/myuser/bin

Ich möchte in der Lage sein, aus jedem Verzeichnis abspath <some_path_here>mein Skript aufzurufen. Ich benutze Bash, was mache ich falsch?

Gepard
quelle

Antworten:

30

Sie möchten eingeben abspath, aber das Programm heißt abspath.sh. Das Problem besteht nicht darin, ob es sich im PATH befindet, sondern darin, dass Sie den Namen einfach nicht verwenden, um ihn aufzurufen.

Sie haben zwei Möglichkeiten:

  1. Geben Sie abspath.shstattdessen ein.
  2. Benennen Sie das Programm in um abspath.
Michael Hampton
quelle
1
... oder erstellen Sie einen Simlink : cd $HOME/bin ; ln -s abspath.sh abspath. Auf diese Weise können Sie die richtige Erweiterung für das Skript beibehalten und ein Tool nach Ihren Wünschen benennen. (Sie könnten in Zukunft Ihr Shell-Skript durch ein Python-Skript ersetzen, zum Beispiel ...)
F. Hauri
Oder erstellen Sie einen Alias.
Jenny D
6

Dieser Code ist klein genug, dass ich ihn als Shell-Funktion codieren würde:

abspath() {
    echo "$(dirname "$(readlink -e "$1")")/$(basename "$1")" 
} 

Und ja, Sie wollen all diese Zitate.

Glenn Jackman
quelle
4

Legen Sie einen Alias ​​fest, indem Sie Ihren Befehl in die .bashrc-Datei einfügen.

alias abspath='sh /home/myuser/bin/abspath.sh'

Und vergessen Sie nicht, die Datei zu beschaffen.

Balasekhar Nelli
quelle
1
Warum willst du hier Sudo?
Ein Lebenslauf
1
Ich würde abstimmen, wenn ich genug Ruf hätte, weil die unnötige Verwendung von sudo einfach falsch ist. Es scheint, dass manche Leute Sudo automatisch für alles verwenden, anstatt zu lernen, wann und warum es benötigt wird.
Scott Severance
Ich bin mit euch einverstanden. Und ich weiß, wann man Sudo benutzt. Ich habe nicht die ganzen Fragen gesehen.
Balasekhar Nelli
2

Ich würde Ihr Bash-Skript umbenennen, abspathum es dann in das binVerzeichnis zu verschieben. Dann können Sie abspathvon überall aus anrufen

Harvey
quelle
0

Eine dritte Option besteht darin, einen Alias ​​namens abspath zu erstellen, der auf Ihr Skript abspath.sh verweist.

Tokamak
quelle
5
Nicht erforderlich, wenn es behoben ist, wie die akzeptierte Lösung erklärt, auch ziemlich kompliziert, und es verbirgt tatsächlich ein Problem, anstatt es anzugehen.
Dawud
Es lohnt sich nicht zu streiten, aber es versteht sich von selbst, dass Sie keine andere Lösung anwenden müssen, wenn Sie es mit einer Lösung lösen. Ja, dies ist eine Bandaid-Lösung, und ein direkter Verweis auf das Shell-Skript ist eine idealere Lösung.
Tokamak