Enlace simbólico y sudo

10

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.

iDev247
fuente
¿Su objetivo es que pwd devuelva la ruta física (/ tmp / folder1) o la ruta lógica (/ tmp / folder2) para ambos?
user9517
Objetivo es volver al camino lógico al utilizar sudo
iDev247

Respuestas:

14

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 -Lo pwd -PTanto el valor predeterminado incorporado como / bin / pwd pwd -Ldesde la página de manual

-L, - uso lógico PWD del entorno, incluso si contiene enlaces simbólicos

así 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 de env_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 -P

-P, --físico evitar todos los enlaces simbólicos

La 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 sudoers

env_keep += "PWD"  
usuario9517
fuente
¡Trabajos! Después de agregar PWD a env_keep, tengo que hacer sudo pwd -Lpara obtener la ruta lógica. sudo pwdDevuelve el camino físico.
iDev247
6

En bash, pwdes un incorporado. /bin/pwdproduce el mismo comportamiento que sudo pwd.

Querrás

  1. uso sudo pwd -L, que solo funciona si
  2. incluir Defaults env_keep=PWDen su sudoersarchivo
Felix Frank
fuente