Qual è la differenza tra UNIX incorporato `comando pwd` e variabile d'ambiente $ PWD è di?

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

  •  09-10-2019
  •  | 
  •  

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ì?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top