readlink
ist der Bash-Standard zum Erhalten des absoluten Pfades. Es hat auch den Vorteil, leere Zeichenfolgen zurückzugeben, wenn Pfade oder ein Pfad nicht vorhanden sind (vorausgesetzt, die Flags dazu).
Verwenden Sie Folgendes, um den absoluten Pfad zu einem Verzeichnis zu erhalten, das möglicherweise vorhanden ist oder nicht, dessen Eltern jedoch vorhanden sind:
abspath=$(readlink -f $path)
So erhalten Sie den absoluten Pfad zu einem Verzeichnis, das zusammen mit allen Eltern vorhanden sein muss:
abspath=$(readlink -e $path)
Um den angegebenen Pfad zu kanonisieren und Symlinks zu folgen, falls vorhanden, aber ansonsten fehlende Verzeichnisse zu ignorieren und den Pfad trotzdem zurückzugeben, ist es:
abspath=$(readlink -m $path)
Der einzige Nachteil ist, dass Readlink Links folgt. Wenn Sie Links nicht folgen möchten, können Sie diese alternative Konvention verwenden:
abspath=$(cd ${path%/*} && echo $PWD/${path##*/})
Dadurch wird der Verzeichnisteil von $ path geändert und das aktuelle Verzeichnis zusammen mit dem Dateiteil von $ path gedruckt. Wenn chdir nicht funktioniert, erhalten Sie eine leere Zeichenfolge und einen Fehler auf stderr.
/foo/bar
oder sogar/foo
tatsächlich vorhanden, oder interessieren Sie sich nur für den Aspekt der Zeichenfolgenmanipulation gemäß den Pfadnamenregeln?