Eu crio um link simbólico:
ln -s /tmp/folder1 /tmp/folder2
Então eu vou para / tmp / folder2 e corro pwd
:
$ cd /tmp/folder2/
$ pwd
/tmp/folder2
$ sudo pwd
/tmp/folder1 # <-- This is the odd part
Por que pwd
com sudo
dar o diretório original? Estou escrevendo um script bash e preciso do caminho absoluto do diretório atual. Com o sudo, não consigo obter o diretório original.
bash
shell
sudo
symbolic-link
iDev247
fonte
fonte
Respostas:
O comando pwd é um shell incorporado e / bin / pwd. Sob circunstâncias normais, o built-in será executado em preferência a / bin / pwd. O comando pwd pode ser chamado como
pwd -L
oupwd -P
O padrão builtin e / bin / pwd são apwd -L
partir da página de manualportanto, quando você executa o pwd, na verdade, executa o pwd -L que, na verdade, imprime $ PWD (se existir). Quando você executa
sudo pwd
, o sudo fornece apenas as variáveis de ambiente que foram solicitadas a serem transmitidas por meio deenv_keep
diretivas. O PWD normalmente não está nesta lista, portanto, o sudo pwd precisa descobrir onde está e, na verdade, é executado comopwd -P
A maneira de resolver o problema é usar
pwd -P
se você deseja consistentemente o caminho do diretório físico ou (como o @Felix diz) para adicionar PWD à lista de variáveis de ambiente para manter através de uma diretiva env_keep em sudoersfonte
sudo pwd -L
para obter o caminho lógico.sudo pwd
retorna o caminho físico.No bash,
pwd
é um builtin./bin/pwd
produz o mesmo comportamento quesudo pwd
.Você vai querer
sudo pwd -L
, que só funciona se vocêDefaults env_keep=PWD
no seusudoers
arquivofonte