In diesem Beispiel:
mkdir a
ln -s a b
ln -s b c
ln -s c d
Wenn ich ausführe:
ls -l d
Wird sich zeigen:
d -> c
Gibt es eine Möglichkeit ls
, d -> c -> b -> a
stattdessen einen anderen Linux-Befehl anzuzeigen ?
linux
shell
symbolic-link
Kalecser
quelle
quelle
Antworten:
Verwenden Sie einfach
namei
:quelle
ls
. Vielen Dank!readlink -e <link>
Hinweis: readlink a selbst gibt b zurück
note # 2: zusammen mit find -l kann ein Dienstprogramm zum Auflisten der Ketten leicht in Perl geschrieben werden, muss aber auch intelligent genug sein, um Schleifen zu erkennen
readlink gibt nichts aus, wenn Sie eine Schleife haben. Das ist wohl besser als stecken zu bleiben.
quelle
brew install coreutils
undgreadlink -e <link>
Hier ist eine rekursive Funktion in Bash:
In mehreren Zeilen:
Beispiele:
Es erfordert,
stat(1)
die auf einigen Systemen möglicherweise nicht vorhanden sind.Es schlägt fehl, wenn Namen Backticks, einfache Anführungszeichen oder "->" enthalten. Es bleibt in einer Schleife mit Symlink-Schleifen stecken (dies könnte mit einem assoziativen Array in Bash 4 gelöst werden). Es exportiert eine Variable namens "chain", unabhängig davon, ob sie bereits verwendet wird.
Es kann andere Probleme damit geben.
Bearbeiten:
Ein Problem mit einigen relativen Symlinks wurde behoben. Einige funktionieren immer noch nicht, aber für die folgende Version muss das Ziel des Links nicht vorhanden sein.
Es wurde eine Version hinzugefügt, die readlink verwendet:
quelle
readlink
scheint das nicht zu zeigen. Java auf Ubuntu ist:/usr/bin/java -> /etc/alternatives/java -> /usr/lib/jvm/java-6-openjdk/jre/bin/java
Sie könnten die Ausgabe von namei einfach mit etwas wie
awk
oder nachbearbeitengrep
, um nur die gewünschten Zeilen zu erhalten:oder
quelle