Bash: wie man echten Pfad, der einen symbolischen Link?
Ist es möglich, die Ausführung einer Datei symlinked in /usr/local/bin-Ordner, um den absoluten Pfad zu dem ursprünglichen Drehbuch? Naja, .. ich weiß, wo die original-Datei ist, und ich weiß es, weil ich bin linkging. Aber, ... ich möchte das dieses script funktioniert, auch wenn ich mich bewege original-source-code (und symlinks).
#!/bin/bash
echo "my path is ..."
readlink
, ls -l
readlink ist eine Funktion, die ich anrufen kann in einem bash-Skript? Ich bin versucht, aber funktioniert nicht =(
readlink ist eine binäre die Teil der coreutils
readlink -f filename
gibt Ihnen einen vollständigen Pfad zum link-Ziel.Nur für GNU
readlink
, nicht für BSD.InformationsquelleAutor sensorario | 2015-04-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
readlink
ist nicht ein standard-Befehl, aber es ist üblich unter Linux und BSD, darunter auch OS X, und es ist die einfachste Antwort auf Ihre Frage. BSD und GNU readlink-Implementierungen sind unterschiedlich, so Lesen Sie die Dokumentation für die, die Sie haben.Wenn
readlink
ist nicht verfügbar, oder Sie schreiben eine cross-Plattform-Skript, das ist nicht gebunden an eine spezifische Implementierung:Wenn der symlink auch ein Verzeichnis, dann
erhalten Sie in der dereferenziert Verzeichnis, so
echo der vollständig aufgelöst Verzeichnis. Das heißt,
cd -P
dereferenziert den gesamten Pfad, also, wenn Sie mehr als einen symlink in den gleichen Pfad, den Sie haben kann unerwartete Ergebnisse.Wenn der symlink auf eine Datei, nicht um ein Verzeichnis, können Sie nicht brauchen, um dereferenzieren Sie den link. Die meisten Befehle follow symlinks harmlos. Wenn Sie wollen einfach nur, um zu überprüfen, ob eine Datei ein link ist, verwenden Sie
test -L
.pwd
hat auch die-P
option. Wenn Sie bereits in das Verzeichnis, das Sie tun können :pwd -P
. Auch wenn Sie nicht in :(cd /path/w/symlinks/ && pwd -P)
InformationsquelleAutor kojiro
nehmen wir an, wir haben ein echtes Skript oder eine Datei und einen symbolischen link:
Und der Teil der GNU coreutils sind einige sehr nützliche Befehle:
siehe auch original:
Auch sehr gut in Kombination scripting verwenden
dirname
auf gespeichertealso um es einpacken, Sie können im Skript -
oder zu erhalten, und speichern in variable real-script, home-Verzeichnis:
Alles zu testen, setzen wir den symlink in /home/test2/, ändern einige zusätzliche Dinge und ausführen/aufrufen-root-Verzeichnis:
Bitte versuchen Sie, schreiben Sie Ihre selbst die geänderten Ausgänge 🙂
InformationsquelleAutor Arunas Bartisius