O que é o $ PWD? (vs diretório de trabalho atual)

22

Portanto, a Wikipédia ( link ) informa que o comando pwd é a abreviação de "imprimir diretório de trabalho" e isso faz sentido.

Mas para a variável de ambiente, o "P" tem que ser um acrônimo para algo diferente de print.

Eu ouço as pessoas falando sobre o "diretório de trabalho atual", que soa melhor e é mais intuitivo, mas ainda assim a variável de ambiente parece ser chamada $ PWD, e não $ CWD. Ninguém nunca diz "Você verificou a variável de diretório de trabalho de impressão?".

Atualmente, estou brincando com o servidor de aplicativos da web uWSGI e, ao executá-lo, informa-me (na página de estatísticas do uWSGI):

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

então eles obviamente gostam do (acrônimo mais intuitivo) cwd over pwd .

Eu acho que estou tentando descobrir se eu entendi mal alguma coisa, ou se é apenas uma questão de ter dado à variável de ambiente um nome não intuitivo?

    
por Mads Skjern 19.12.2014 / 10:32

2 respostas

21

Isso depende do que você está fazendo. Primeiro de tudo, $PWD é uma variável de ambiente e pwd é um shell embutido ou um binário real:

$ type -a pwd
pwd is a shell builtin
pwd is /bin/pwd

Agora, o bash builtin simplesmente imprimirá o valor atual de $PWD , a menos que você use o -P flag. Conforme explicado em 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.

O pwd binary, por outro lado, obtém o diretório atual através do getcwd(3) chamada do sistema que retorna o mesmo valor que readlink -f /proc/self/cwd . Para ilustrar, tente mudar para um diretório que seja um link para outro:

$ 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

Assim, em conclusão, em sistemas GNU (como o Ubuntu), pwd e echo $PWD são equivalentes, a menos que você use a opção -P , mas /bin/pwd é diferente e se comporta como pwd -P .

Fonte link

    
por 19.12.2014 / 11:56
13

$ PWD é o P no nome da atual W orking D da iretória

Quando existem links simbólicos podem ser resultados diferentes da leitura de $ PWD para executar o comando pwd .

    
por 19.12.2014 / 10:39