Versuchen Sie:
ABSOLUTE_PATH=$(cd /home/nohsib/dvc/../bop; pwd)
Was Sie suchen, ist readlink
:
absolute_path=$(readlink -m /home/nohsib/dvc/../bop)
Bitte beachten: Sie müssen GNUs readlink
verwenden -Implementierung, die die Option "-m" anbietet. BSDs readlink
zum Beispiel nicht.
Wenn Sie dies tun möchten, ohne Symlinks zu folgen, versuchen Sie es mit realpath
mit Option -s
:
$ realpath -s /home/nohsib/dvc/../bop
/home/nohsib/bop
Beachten Sie das mit realpath
, müssen normalerweise alle bis auf die letzte Komponente vorhanden sein. Damit das obige funktioniert, muss also alles im Dateisystem vorhanden sein:
/home
/home/nohsib
/home/nohsib/dvc
Sie können diese Anforderung jedoch mit -m
umgehen Option.
$ realpath -sm /home/nohsib/dvc/../bop
/home/nohsib/bop
(Beachten Sie realpath
ist nicht auf allen Systemen verfügbar, insbesondere auf älteren Nicht-Debian-Systemen. Für diejenigen, die mit eingebettetem Linux arbeiten, leider Busybox realpath
unterstützt nicht den -s
oder -m
Schalter.)
Ein Problem bei der Verwendung von :
ABSOLUTE_PATH=$(cd ${possibleDirectory}; pwd)
ist, dass, wenn ${possibleDirectory} nicht existiert, ABSOLUTE_PATH dann auf das aktuelle Verzeichnis gesetzt wird. Was Sie wahrscheinlich NICHT wollen oder erwarten.
Ich denke, dass die Verwendung dieser Version im Allgemeinen wünschenswerter sein kann:
ABSOLUTE_PATH=$(cd ${possibleDirectory} && pwd)
Wenn ${possibleDirectory} aufgrund fehlender Verzeichniszugriffsberechtigungen nicht existiert oder nicht zugänglich ist, enthält ABSOLUTE_PATH die leere Zeichenfolge.
Der Vorteil davon ist, dass Sie dann je nach den Umständen auf die leere Zeichenfolge testen oder sie natürlich fehlschlagen lassen können. Das standardmäßige Verwenden des aktuellen Verzeichnisses im Falle eines fehlgeschlagenen 'cd'-Befehls kann zu sehr unerwarteten und möglicherweise katastrophalen Ergebnissen führen (z. B. rm -rf "$ABSOLUTE_PATH" )