Wie kann ich einen Befehl (oder Alias) erstellen, um in das Verzeichnis zu gelangen, das die Zieldatei eines Symlinks enthält? Wenn ich beispielsweise einen Symlink habe
symFile@ -> /Users/zhermes/some/dir/someFile
Ich möchte laufen können <command> symFile
und es cd
mir ermöglichen/Users/zhermes/some/dir/
Antwort1
Die folgende Funktion prüft, ob der symbolische Link existiert und cd
verweist auf sein übergeordnetes Verzeichnis. Natürlich funktioniert sie auch mit normalen Dateien. Bei Fehlern von readlink
oder könnte sie noch cleverer sein cd
, aber es ist ein Anfang.
GNU/Linux:
Unter GNU/Linux können Sie Folgendes verwenden readlink -f
:
cdln() { [[ -f $1 ]] && cd "$(dirname "$(readlink -f "$1")")" || echo "No such file: $1" }
BSD / OS X:
Das Folgende sollte unter Unix/OS X funktionieren, wo es keine -f
Option gibt readlink
. Das bedeutet natürlich, dass es verschachtelten symbolischen Links nicht folgt.
cdln() { [[ -f $1 ]] && cd "$(dirname "$(readlink "$1")")" || echo "No such file: $1" }
Unter OS X können Sie installieren coreutils
mitSelbstgebrautesund verwenden Sie greadlink -f
stattdessen.