pwd ohne symlinks

54

Wenn ich pwdes bemerke, werden die Symlinks verwendet, die ich verwendet habe, um in das aktuelle Verzeichnis zu gelangen. Kann ich mir das "echte" Verzeichnis anzeigen lassen, in dem ich mich befinde, dh den Pfad vom Stammverzeichnis zu meinem aktuellen Verzeichnis, ohne dass Symlinks verwendet werden?

JoelFan
quelle

Antworten:

70

Laut der POSIX-Manpage für pwdkann die -POption von Nutzen sein:

-P Der geschriebene absolute Pfadname darf keine Dateinamen enthalten, die im Kontext des Pfadnamens auf Dateien vom Typ symbolischer Verknüpfung verweisen.

Somit

$ pwd -P

sollte das sein, was du brauchst.

Steven D
quelle
Ich möchte darauf hinweisen, dass diese Informationen leicht gefunden werden können, indem Sie man pwdin die Shell tippen, um die Optionen für diesen Befehl herauszufinden.
Chud37
7

Die eingebaute pwd-Shell verwendet den Pfad, den die Shell verfolgt, wenn Sie cd(und speichert $PWD). Wenn Sie also einen Symlink zu einem komplexen (tiefen) Pfad haben, erfahren Sie, was Sie eingegeben haben, um in dieses Verzeichnis anstatt in den tatsächlichen Pfad zu wechseln. Dies geschieht, um Ihnen die meiste Zeit das zu geben, was Sie wollen.

/bin/pwdVerwendet den getcwdSystemaufruf (der heutzutage ein Bibliotheksaufruf ist, Reading /proc/self/cwd), der den kanonischen Pfad für das aktuelle Verzeichnis zurückgibt, ohne alle Symlink-Traversen.

Wie Steven D betonte, pwdhat die -POption zu ignorieren $PWD. Es hat auch die -LMöglichkeit, den Inhalt von zurückzugeben $PWD. Die Manpage für pwdgibt nicht an, welche Option standardmäßig verwendet wird, aber erfahrungsgemäß ist die obige Beschreibung korrekt (Shell pwdvs. /bin/pwd). Allerdings solltest du dich wohl nicht darauf verlassen und einfach nutzen pwd -P.

camh
quelle
2
Das von Ihnen beschriebene Verhalten ist das auf Linux-Systemen, auf denen /bin/pwdGNU ausgeführt wird, pwdwenn POSIXLY_CORRECT nicht festgelegt ist. Auf POSIX-Systemen, auf denen sich das pwdbefindet /bin. /bin/pwdverwendet $ PWD und kann Pfade mit Symlinks zurückgeben. GNU pwd verhält sich in dieser POSIX-Weise, wenn es eine POSIXLY_CORRECT-Variable in seiner Umgebung findet.
Stéphane Chazelas