Differenza d'uso tra pwd e $ PWD


9

Per stampare la directory di lavoro corrente / presente sono disponibili variabili $PWD e comandi di ambientepwd . Quindi, qual è la differenza nell'uso di entrambi? o Cosa dovrebbe essere scelto per uno scopo specifico?

Risposte:


10

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.


Una differenza è che l'uso di $ PWD quando disponibile eviterà di creare un sottocomando come echo o pwd. Ciò lo rende vantaggioso per la traccia delle prestazioni e del programma.
Joe Atzberger,

3

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.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.