So lösen Sie symbolische Links in einem Shell-Skript

Gegeben, einen absoluten oder einen relativen Pfad (in einem Unix-artigen system), würde ich mag, um zu bestimmen, die den vollständigen Pfad der das Ziel nach Behebung einer zwischengeschalteten symlinks. Bonus-Punkte für die Lösung ~username notation zur gleichen Zeit.

Wenn das Ziel ein Verzeichnis ist, könnte es möglich sein, zu chdir() in das Verzeichnis und rufen Sie dann getcwd(), aber ich wirklich wollen, dies zu tun von einem shell-Skript eher als das schreiben einer C-Helfer. Leider Schalen haben eine Tendenz, zu versuchen zu verbergen die Existenz von symlinks von den Benutzer (dies ist die bash unter OS X):

$ ls -ld foo bar
drwxr-xr-x   2 greg  greg  68 Aug 11 22:36 bar
lrwxr-xr-x   1 greg  greg   3 Aug 11 22:36 foo -> bar
$ cd foo
$ pwd
/Users/greg/tmp/foo
$

Was ich will, ist eine Funktion resolve (), so dass, wenn Sie ausgeführt aus dem tmp-Verzeichnis in dem obigen Beispiel, resolve("foo") == "/Users/greg/tmp/bar".

InformationsquelleAutor der Frage Greg Hewgill | 2008-08-11

Schreibe einen Kommentar