Ich habe ein Hilfsprogramm, das aus einigen Verzeichnissen mit einigen Bash-Skripten und unterstützenden Dateien besteht, die möglicherweise in einem anderen Verzeichnis auf jedem Computer auf mehreren Computern bereitgestellt werden. Die Skripte müssen in der Lage sein, Pfade relativ zu sich selbst zu referenzieren, damit ich den Pfad zu der Datei erhalten kann, die gerade ausgeführt wird.
Mir ist die dirname $0
Redewendung bekannt, die perfekt funktioniert, wenn mein Skript direkt aufgerufen wird. Leider besteht der Wunsch, in der Lage zu sein, Symlinks zu diesen Skripten aus einem völlig anderen Verzeichnis zu erstellen und dennoch die relative Pfadlogik zu verwenden.
Ein Beispiel für die gesamte Trocknungsstruktur ist wie folgt:
/
|-usr/local/lib
| |-foo
| | |-bin
| | | |-script.sh
| | |-res
| | | |-resource_file.txt
|-home/mike/bin
| |-link_to_script (symlink to /usr/local/lib/foo/bin/script.sh)
Wie kann ich sicher Referenz /usr/local/lib/foo/res/resource_file.txt
aus , script.sh
ob sie von aufgerufen wird , /usr/local/lib/foo/bin/script.sh
oder ~mike/bin/link_to_script
?
quelle
source
d ist (zB$ source ./sript.sh
) Dies funktioniert in beiden Fällen:DIR="$(cd "$(dirname "$BASH_SOURCE")" && pwd)"
eine Linie:
quelle
readlink -f
funktioniert bei mir nicht, ich habe diesen Fehler:Aber das funktioniert gut:
quelle
Eine kleine Ergänzung zum obigen Skript. Die Option -P für pwd folgt symlinks
quelle