Das hängt davon ab, was Sie tun. Erstens $PWD
ist es eine Umgebungsvariable und pwd
eine eingebaute Shell oder eine tatsächliche Binärdatei:
$ type -a pwd
pwd is a shell builtin
pwd is /bin/pwd
Jetzt druckt die eingebaute Bash einfach den aktuellen Wert von, es $PWD
sei denn, Sie verwenden das -P
Flag. Wie erklärt in help pwd
:
pwd: pwd [-LP]
Print the name of the current working directory.
Options:
-L print the value of $PWD if it names the current working
directory
-P print the physical directory, without any symbolic links
By default, `pwd' behaves as if `-L' were specified.
Die pwd
Binärdatei hingegen erhält das aktuelle Verzeichnis über den getcwd(3)
Systemaufruf, der denselben Wert wie zurückgibt readlink -f /proc/self/cwd
. Versuchen Sie zur Veranschaulichung, in ein Verzeichnis zu wechseln, das mit einem anderen verknüpft ist:
$ ls -l
total 4
drwxr-xr-x 2 terdon terdon 4096 Jun 4 11:22 foo
lrwxrwxrwx 1 terdon terdon 4 Jun 4 11:22 linktofoo -> foo/
$ cd linktofoo
$ echo $PWD
/home/terdon/foo/linktofoo
$ pwd
/home/terdon/foo/linktofoo
$ /bin/pwd
/home/terdon/foo/foo
So, zum Schluss, auf GNU - Systemen (wie Ubuntu), pwd
und echo $PWD
sind gleichwertig , wenn Sie die Verwendung -P
Option aber /bin/pwd
ist anders und verhält sich wie pwd -P
.
Beide geben das gleiche Ergebnis zurück, wenn Sie sie ohne Optionen für alle Arbeitsverzeichnisse verwenden, auch wenn sie sich in symbolischen Links befinden.
Jedoch von
man pwd
:Dies würde bedeuten, dass
pwd -P
bei Ausführung in symbolischen Links, die auf einige andere Verzeichnisse verweisen, der Pfad zum ursprünglichen Verzeichnis gedruckt wird.Wenn Sie beispielsweise einen symbolischen Link haben
/var/run
, der auf verweist,/run
und sich derzeit im/var/run/
Verzeichnis befinden, wird ausgeführtwird zurückkehren:
und wird das gleiche sein für
pwd
. Wenn Sie jedoch Folgendes ausführen:wird zurückkehren
Es kommt also darauf an, welchen Pfad Sie benötigen: den tatsächlichen Pfad ohne symbolische Links oder das aktuelle Verzeichnis, in dem die symbolischen Links ignoriert werden. Der einzige Unterschied zwischen
pwd -P
undecho $PWD
besteht darin, dass es symbolische Verknüpfungen gibt.quelle