Para imprimir a variável $PWD
e o comando do ambiente de diretório de trabalho atual / presente, pwd
estão disponíveis. Então, qual é a diferença no uso de ambos? ou O que deve ser escolhido para uma finalidade específica?
fonte
Para imprimir a variável $PWD
e o comando do ambiente de diretório de trabalho atual / presente, pwd
estão disponíveis. Então, qual é a diferença no uso de ambos? ou O que deve ser escolhido para uma finalidade específica?
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 embutido simplesmente imprimirá o valor atual de, a $PWD
menos que você use o -P
sinalizador. Como 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
binário, por outro lado, obtém o diretório atual através da 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 é 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
Portanto, em conclusão, nos sistemas GNU (como o Ubuntu) pwd
e echo $PWD
são equivalentes, a menos que você use a -P
opção, mas /bin/pwd
seja diferente e se comporte como pwd -P
.
Ambos retornarão o mesmo resultado se você os usar sem opções para todos os diretórios de trabalho, inclusive quando estiver em links simbólicos.
No entanto, de
man pwd
:Isso significaria executar
pwd -P
quando em links simbólicos que apontam para outros diretórios imprimir o caminho para o diretório original.Como exemplo, se você tiver um link simbólico
/var/run
que aponte para/run
e você estiver atualmente no/var/run/
diretório, executandoretornará:
e será o mesmo para
pwd
. No entanto, se você executar:retornará
Portanto, depende de qual caminho você deseja: o caminho real sem links simbólicos ou o diretório atual ignorando os links simbólicos. A única diferença entre
pwd -P
eecho $PWD
é quando existem links simbólicos.fonte