Den kanonischen Pfad für einen Befehl abrufen

Den kanonischen Pfad für einen Befehl abrufen

Ich schreibe ein Skript, das den kanonischen Pfad bestimmter Befehle benötigt. Da es symbolische Links geben könnte, die auf die eigentlichen Befehle verweisen, verwende ich , readlink -fum den kanonischen Pfad zu erhalten. Aber ich bekomme mit nicht das, was ich eigentlich will. readlink -fIch erkläre es anhand des folgenden Beispiels:

Nehmen wir an, mein aktuelles Verzeichnis ist: Wenn ich versuche, einen Pfad davon /home/user/Documents abzurufen, erhalte ich Folgendes:sleepreadlink -f

/home/user/Documents/sleep

Was ich eigentlich will, ist/bin/sleep

Antwort1

readlink -f "$(type -P sleep)"

oder wenn Sie leistungsbewusst sind:

cpath="$(type -P sleep)"; [ ! -L "$cpath" ] || cpath="$(readlink -f "$cpath")"

Die Verwendung von readlink -e(existing) anstelle von readlink -fkann Sie vor solchen Unfällen bewahren, bei denen Sie mit einer nicht vorhandenen Datei arbeiten.

Das zweite Beispiel geht davon aus, dass der zurückgegebene Pfad type -Pkanonisch ist. Dies bedeutet, dass Ihr Pfad keine nicht-kanonischen Komponenten aufweist.

verwandte Informationen