Hallo!
Ich brauche in einem Bash Skript den genauen Pfad in dem das Skript liegt. Normalerweise würde man es mit $0 abfragen, jedoch funktioniert dies nur wenn ich das Skript über den $PATH starte. Wenn ich es direkt starte steht in $0 der Aufrufpfad (den ich mir mit $PWD zu dem Gesamtpfad zusammenstöpseln könnte).
Gibt es da eine elegantere Möglichkeit?
Danke,
Burt
Kann man nicht in Bash Scripts einfach eine Reihe von Befehlen abarbeiten
lassen? Versuch doch mal die Ausgabe von pwd an die Variable weiterzugeben…
mfg
Alex
Tach,
wenn Du den Pfad des Skriptes selbst brauchst, kannst Du den mit
echo $(dirname $0) anzeigen lassen
oder mit
S_PATH=$(dirname $0) in eine Variable schreiben lassen.
Gruß,
Andi
Hi Andi!
Das funktioniert eben leider nicht so einfach. Sobald das Skript z.B. mit:
# bin/script.sh
aufgerufen wird steht in $0 “bin/script.sh” drinnen. Hier müsste ich $PWD noch vorne dazuhängen. Wenn ich das Skript über den $PATH aufrufe steht in $0 z.B. “/home/username/bin/script.sh”. Offensichtlich muss man hier tatsächlich eine Fallunterscheidung im Skript programmieren.
LG,
Burt
Hallo Burt! script_path=`ls -l /proc/$$/fd/255 | sed -e “s/.*-> //”` echo $script_path Funktioniert nicht für Skripte, die ein “-> ” im Namen haben. Und klappt evtl. nur unter Linux, nicht auf anderen UNIX Systemen.
Harald
Danke für den Tipp. Das funktioniert offensichtlich auch wenn ein Symlink auf das Skript aufgerufen wird anstelle des Skriptes selber. Ich befürchte aber, wie du schon geschrieben hast, dass es mit der Portabilität nicht sehr gut aussieht.
LG,
Burt
Hallo Burt,
——————
#/bin/bash
cd $(dirname $0)
script_path=$PWD
cd –
——————
Dann steht in script_path was Du suchst.
MfG
Günter
Hallo Günter!
Sieht sehr gut aus, nur leider funktioniert dies nicht sobald ein Symlink aufgerufen wird der auf das Skript zeigt. Dann bekommt man das Verzeichnis des Links anstelle des Skripts.
LG,
Burt
Hallo Burt,
aber es funktioniert auch mit Aix und Korn-Shell.
MfG
Günter
Naja, eben leider nicht. Es liefert nur den Pfad des Symlinks zurück über den ich mein Skript ausführe.
LG,
Burt
Das folgende Script funktioniert sowohl unter Suse 9.2 mit bash als auh unter Aix 5.? mit ksh.
——————————————————
#/bin/bash
last_object=$0
while [[ -L $last_object ]]
do
new_file=$(ls -l $last_object)
new_file=${new_file##* }
last_object=$(dirname $last_object)/${new_file##* }
done
cd $(dirname $last_object)
last_object=$PWD/$(basename $last_object)
echo gesucht $(dirname $last_object)
exit
——————————————————-
MfG
Günter