Che cos'è $ PWD? (rispetto alla directory di lavoro corrente)


27

Quindi Wikipedia ( link ) mi dice che il comando pwdè l'abbreviazione di "print working directory", e questo ha senso.

Ma per la variabile d'ambiente, la "P" deve essere l'acronimo di qualcos'altro oltre alla stampa.

Sento persone che parlano della "directory di lavoro corrente", che suona meglio ed è più intuitiva, ma la variabile d'ambiente sembra essere chiamata $ PWD e non $ CWD. Nessuno ha mai detto "Hai controllato la variabile della directory di lavoro di stampa?".

Attualmente sto giocando con il server delle applicazioni web uWSGI e quando lo eseguo mi dice (sulla pagina delle statistiche uWSGI):

"cwd":"/home/velle/greendrinks",

in modo che, ovviamente, come il (acronimo più intuitiva) cwdsopra pwd.

Immagino che sto cercando di capire se ho frainteso qualcosa o se si tratta solo di aver dato un nome non intuitivo alla variabile d'ambiente?


5
Directory di lavoro attuale?
DarioP

3
Sospetto che tu lo stia solo pensando troppo. $PWDè equivalente a `pwd`, e questa era una giustificazione sufficiente.
quell'altro ragazzo il

1
Un'altra ipotesi: elaborare la directory di lavoro?
oxfn,

Risposte:


23

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, l'integrato bash stamperà semplicemente il valore corrente di a $PWDmeno che tu non usi la -Pbandiera. Come spiegato in help pwd:

pwd: pwd [-LP]

    Stampa il nome della directory di lavoro corrente.

    Opzioni:

      -L
          stampa il valore di $PWD se nomina la directory di lavoro corrente
      -P
          stampa la directory fisica, senza collegamenti simbolici

    Per impostazione predefinita, 'pwd' si comporta come se fosse specificato '-L'.

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/pwdè diverso e si comporta come pwd -P.

Fonte /ubuntu//a/476633/291937


1
@llua Nulla vieta PWDdi essere una variabile d'ambiente. In realtà è il caso predefinito con la maggior parte se non tutte le shell e ha senso fornirlo ai processi secondari.
jlliagre,

1
Mi chiedo perché le persone abbiano effettuato il downvoting, sembra una buona risposta e spiegata a fondo.
Mads Skjern,

2
@MadsSkjern La maggior parte dei builtin sono richiesti dallo standard POSIX per essere disponibili anche come comandi. Questo per consentire di chiamarli direttamente da altri programmi senza la necessità di avviare una shell.
jlliagre,

2
Questo non mi risponde davvero alla domanda. La domanda non riguarda in realtà le differenze tra $PWDe pwd(che sono già state trattate in U&L prima che io creda), ma sulle ragioni che hanno portato alla denominazione della variabile " PWD".
John WH Smith,

1
@Thushi Hai più che probabilmente ragione. PWD è stato introdotto da ksh88quale documento come: PWD The present working directory set by the cd command.Dovresti aggiungere questo alla tua risposta.
jlliagre,

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.