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é pwd
con sudo
dar 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 -L
opwd -P
Tanto el valor predeterminado incorporado como / bin / pwdpwd -L
desde 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_keep
directivas. PWD normalmente no está en esta lista, por lo que sudo pwd tiene que averiguar dónde está y, de hecho, se ejecuta comopwd -P
La forma de resolver el problema es usarlo
pwd -P
si 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 -L
para obtener la ruta lógica.sudo pwd
Devuelve el camino físico.En bash,
pwd
es un incorporado./bin/pwd
produce el mismo comportamiento quesudo pwd
.Querrás
sudo pwd -L
, que solo funciona siDefaults env_keep=PWD
en susudoers
archivofuente