Was ist der Unterschied zwischen Unix-built-in `pwd` Befehl und $ PWD-Umgebungsvariable oder?

StackOverflow https://stackoverflow.com/questions/4362643

  •  09-10-2019
  •  | 
  •  

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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top