Risposte:
Dipende da cosa stai facendo. Prima di tutto, $PWDè una variabile d'ambiente ed pwdè una shell incorporata o un vero binario:
$ type -a pwd
pwd is a shell builtin
pwd is /bin/pwd
Ora, il built-in bash stamperà semplicemente il valore corrente di a $PWDmeno che tu non usi la -Pbandiera. Come spiegato 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.
Il pwdbinario, d'altra parte, ottiene la directory corrente attraverso la getcwd(3)chiamata di sistema che restituisce lo stesso valore di readlink -f /proc/self/cwd. Per illustrare, prova a spostarti in una directory che è un collegamento a un'altra:
$ 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
Quindi, in conclusione, sui sistemi GNU (come Ubuntu), pwde echo $PWDsono equivalenti a meno che tu non usi l' -Popzione ma /bin/pwdsia diverso e si comporti come pwd -P.
Entrambi restituiranno lo stesso risultato se li si utilizza senza opzioni per tutte le directory di lavoro, anche quando si trovano nei collegamenti simbolici.
Tuttavia, da man pwd:
-P, --physical
avoid all symlinks
Ciò significherebbe eseguire pwd -Pquando si trovano in collegamenti simbolici che puntano ad altre directory stamperanno il percorso della directory originale.
Ad esempio, se si dispone di un collegamento simbolico /var/runche punta a /rune si è attualmente nella /var/run/directory, in esecuzione
echo $PWD
tornerà:
/var/run
e sarà lo stesso per pwd. Tuttavia, se si esegue:
pwd -P
tornerà
/run
Pertanto, dipende dal percorso richiesto: il percorso effettivo senza collegamenti simbolici o la directory corrente che ignora i collegamenti simbolici. L'unica differenza tra pwd -Pe echo $PWDè quando ci sono collegamenti simbolici.