Was ist der Unterschied zwischen Unix-built-in `pwd` Befehl und $ PWD-Umgebungsvariable oder?
Frage
Hier ist der Fall. Ich habe ein Verzeichnis Aufruf: - % / Home / myname /
habe ich einen Soft-Link in diesem Verzeichnis: - % Cd / home / myname / % Ln -s / home / andere /.
Nun, ich cd in andere / aus / home / myname / Hier ist der interessante Teil.
Als ich ein Unix habe eingebaute in pwd
Befehl, ich die ursprünglichen Pfadnamen erhalten: -
% / Home / others /
Aber wenn ich den $ PWD Umgebungsvariable Echo, i die Link Pfadnamen erhalten: - % / Home / myname / others /
Warum ist das so?
Lösung
/var# ls -l lrwxrwxrwx 1 root root 10 Aug 22 13:21 mail -> spool/mail drwxr-xr-x 2 root root 4096 Jul 1 20:58 opt drwxr-xr-x 22 root root 4096 Dec 5 17:38 run drwxr-xr-x 12 root root 4096 Aug 22 13:21 spool drwxrwxrwt 14 root root 4096 Dec 6 02:46 tmp /var# cd mail /var/mail# echo $PWD /var/mail /var/mail# pwd /var/mail /var/mail# /bin/pwd /var/spool/mail
Mit anderen Worten, $PWD
mit ausreichend ist, weil pwd
nicht bessere Ergebnisse geben könnte (für jede Definition besser) sowieso.
Warum ist das so? /bin/pwd
verwendet OS-spezifische Anrufe das aktuelle Arbeitsverzeichnis zu bestimmen, -. und im Falle von Linux, der Kernel hält nur die aufgelöste Verzeichnis (siehe /proc/self/cwd
), während die Shell des Menschen mit Behinderung enthalten, was die Shell denkt, es ist in
Andere Tipps
Der Unterschied zwischen dem /bin/pwd
externen Befehl und die eingebaute in ist, dass der externe Befehl nicht weiß, was von cd
Operationen eingestellt hast du da und deshalb erhebt nicht den Anspruch, dass das aktuelle Verzeichnis irgendwo auf einer Kette von Symlinks; es gibt Ihnen den direkten Weg von der Wurzel zu Ihrem aktuellen Verzeichnis, eher wie die realpath()
Funktion würde.
Siehe set -o physical
in bash
.