Ich habe ein Shell-Skript in /usr/bin
. Nennen wir es hello
.
Es enthält Folgendes:
echo "I am located in $PWD"
echo "I am called from this directory: ???"
Ausführen von hello
von /home/Documents
Ich erwarte folgende Ausgabe:
I am located in /usr/bin
I am called from this directory: /home/Documents
Wie erhalte ich den Verzeichnispfad, in dem das Skript ausgeführt wird?
Akzeptierte Antwort:
Ich kann keine andere Antwort kommentieren, also poste ich hier. Wie gesagt, dirname
liest nur $0
und nimmt den Verzeichnisnamen, also wenn Sie so etwas wie ../../directory/something.sh
aufgerufen haben es löst diese Punkte nicht auf, sondern gibt nur ../../directory
zurück . Anstatt die Subshell-Erweiterung mit cd
zu verwenden und pwd
, können Sie einen sehr intelligenten Befehl readlink
verwenden das löst nicht nur gepunktete Verzeichnisse, sondern auch alle symbolischen Links auf. Ich schlage daher vor
echo "I am located at $(readlink -e -- "$0")"
Sie können einen anderen dirname
verwenden um dies herum, um das Verzeichnis anstelle der Datei zu erhalten.