Antworten:
Das hängt davon ab, was Sie tun. Erstens $PWDist es eine Umgebungsvariable und pwdeine 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 $PWDsei denn, Sie verwenden das -PFlag. 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 pwdBinä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), pwdund echo $PWDsind gleichwertig , wenn Sie die Verwendung -POption aber /bin/pwdist 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:
-P, --physical
avoid all symlinks
Dies würde bedeuten, dass pwd -Pbei 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, /runund sich derzeit im /var/run/Verzeichnis befinden, wird ausgeführt
echo $PWD
wird zurückkehren:
/var/run
und wird das gleiche sein für pwd. Wenn Sie jedoch Folgendes ausführen:
pwd -P
wird zurückkehren
/run
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 -Pund echo $PWDbesteht darin, dass es symbolische Verknüpfungen gibt.