Verwendungsunterschied zwischen pwd und $ PWD

9

Zum Drucken des aktuellen / aktuellen Arbeitsverzeichnisses stehen Umgebungsvariable $PWD und Befehl pwd zur Verfügung. Also, was ist der Unterschied in der Verwendung von beiden? oder Was sollte für einen bestimmten Zweck ausgewählt werden?

Pandya
quelle

Antworten:

10

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.

Terdon
quelle
Ein Unterschied besteht darin, dass durch die Verwendung von $ PWD, sofern verfügbar, ein Unterbefehl wie echo oder pwd vermieden wird. Dies macht es vorteilhaft für die Leistung und Programmverfolgung.
Joe Atzberger
3

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.

Job in
quelle