Ich weiß, dass ich in einem Bash-Skript überprüfen kann, ob eine Datei ein symbolischer Link mit der folgenden Syntax ist
if [ -L $path ]
Weiß jemand, wie ich testen würde, ob dieser Pfad mit einem bestimmten Pfad verknüpft ist? Ich möchte zB prüfen, ob das Ziel von $path
ist /some/where
.
readlink
bekannten Pfad nicht mit dem Pfad vergleichen, den Sie testen?if [ -L "$path" ]
), es sei denn, Sie haben einen guten Grund, dies nicht zu tun, und Sie sind sicher, dass Sie wissen, was Sie tun.Antworten:
Wenn Sie überprüfen möchten, ob
$path
es sich um einen symbolischen Link handelt, dessen Ziel es ist/some/where
, können Sie dasreadlink
Dienstprogramm verwenden. Es ist kein POSIX, aber es ist auf vielen Systemen verfügbar (GNU / Linux, BusyBox, * BSD,…).Beachten Sie, dass dies ein genauer Textvergleich ist. Wenn das Ziel des Links ist
/some//where
, oder wenn eswhere
und der Wert von$path
ist/some/link
, stimmen die Texte nicht überein.Viele Versionen
readlink
unterstützen die Option-f
, die den Pfad kanonisiert, indem alle symbolischen Links erweitert werden.Viele Shells, einschließlich dash, ksh, bash und zsh, unterstützen den
-ef
Operator imtest
Builtin, um zu testen, ob zwei Dateien identisch sind (feste Verknüpfungen zu derselben Datei, nachdem symbolischen Verknüpfungen gefolgt wurde). Diese Funktion wird ebenfalls weitgehend unterstützt, jedoch nicht für POSIX.quelle
So vermeiden Sie Probleme mit einem relativen und absoluten Pfad und "/" am Ende eines Pfads oder einer Verknüpfung:
quelle
readlink
scheint nicht notwendig zu sein, löstrealpath
automatisch den symbolischen Link auf.