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.