Creo un enlace simbólico:
ln -s /tmp/folder1 /tmp/folder2
Luego voy a / tmp / folder2 y ejecuto pwd:
$ cd /tmp/folder2/
$ pwd
/tmp/folder2
$ sudo pwd
/tmp/folder1 # <-- This is the odd part
¿Por qué pwdcon sudodar el directorio original? Estoy escribiendo un script bash y necesito la ruta absoluta del directorio actual. Con sudo parece que no puedo obtener el directorio original.
bash
shell
sudo
symbolic-link
iDev247
fuente
fuente

Respuestas:
El comando pwd es un shell incorporado y / bin / pwd. En circunstancias normales, el builtin se ejecutará con preferencia a / bin / pwd. El comando pwd se puede llamar como
pwd -Lopwd -PTanto el valor predeterminado incorporado como / bin / pwdpwd -Ldesde la página de manualasí que cuando ejecuta pwd, realmente ejecuta pwd -L, que en efecto imprime $ PWD (si existe). Cuando ejecuta
sudo pwd, sudo solo proporciona las variables de entorno que se le ha dicho que pase a través deenv_keepdirectivas. PWD normalmente no está en esta lista, por lo que sudo pwd tiene que averiguar dónde está y, de hecho, se ejecuta comopwd -PLa forma de resolver el problema es usarlo
pwd -Psi desea consistentemente la ruta del directorio físico o (como dice @Felix) agregar PWD a la lista de variables de entorno para mantener a través de una directiva env_keep en sudoersfuente
sudo pwd -Lpara obtener la ruta lógica.sudo pwdDevuelve el camino físico.En bash,
pwdes un incorporado./bin/pwdproduce el mismo comportamiento quesudo pwd.Querrás
sudo pwd -L, que solo funciona siDefaults env_keep=PWDen susudoersarchivofuente