Qual è la differenza tra UNIX incorporato `comando pwd` e variabile d'ambiente $ PWD è di?
Domanda
Ecco il caso. Ho una chiamata directory: - % / Home / myname /
ho fatto un soft link in quella directory: - % Cd / home / myname / % Ln -s / home / altri /.
Ora, cd in altri / da / home / myname / Ecco la parte interessante.
Quando ho fatto un unix comando built-in pwd
, ottengo il nome del percorso ORIGINALE: -
% / Home / altri /
Ma quando mi associo la variabile d'ambiente PWD $, ottengo il nome del percorso di collegamento: - % / Home / myname / altri /
Perché è così?
Soluzione
/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
In altre parole, utilizzando $PWD
è sufficiente, perché pwd
non potrebbe dare risultati migliori (per qualsiasi definizione di meglio) in ogni caso.
Perché è che? /bin/pwd
utilizza le chiamate OS-specifici per determinare la directory di lavoro corrente -. ed in caso di Linux, il kernel mantiene solo la directory risolti (vedere /proc/self/cwd
), mentre PWDs della shell contengono ciò che il guscio pensa che sia in
Altri suggerimenti
La differenza tra il comando esterno /bin/pwd
e il built-in è che il comando esterno non sa cosa complesso di operazioni cd
avete ottenuto lì e quindi non far finta che la vostra directory corrente è da qualche parte lungo una catena di link simbolici; ti dà il percorso diretto dalla radice alla directory corrente, un po 'come la funzione realpath()
avrebbe fatto.
Vedere set -o physical
in bash
.