10 votos

Enlace simbólico y sudo

Puedo crear un enlace simbólico:

ln -s /tmp/folder1 /tmp/folder2

A continuación, voy a /tmp/carpeta2 y ejecutar 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 en bash y la necesidad de la ruta de acceso absoluta del directorio actual. Con sudo me parece que no puede ser capaz de obtener el directorio original.

14voto

katit Puntos 130

El pwd comando es un shell integrados y /bin/pwd. Bajo circunstancias normales, el grupo builtin se ejecutará con preferencia a /bin/pwd. El comando pwd puede ser llamado como pwd -L o pwd -P Tanto en el grupo builtin y /bin/pwd defecto a pwd -L de la página man

-L, --lógico el uso de las PCD desde el medio ambiente, incluso si contiene enlaces simbólicos

así que cuando se ejecuta pwd ejecutar pwd-L, que en efecto imprime $PWD (si es que existe). Cuando ejecute sudo pwd, sudo sólo proporciona las variables de entorno que se ha dicho que se pase por la via env_keep directivas. PWD normalmente no se encuentra en esta lista, de modo sudo pwd tiene que trabajar fuera de donde es y en efecto se ejecuta como pwd -P

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

La manera de resolver el problema es utilizar pwd -P si usted siempre quiere que la física ruta del directorio o (como @Felix dice ) para agregar PWD a la lista de variables de entorno para mantener a través de un env_keep directiva en sudoers

env_keep += "PWD"  

6voto

Felix Frank Puntos 1900

En bash, pwd es un builtin. /bin/pwd se obtiene el mismo comportamiento como sudo pwd.

Usted va a querer

  1. uso sudo pwd -L, que sólo funciona si usted
  2. incluir Defaults env_keep=PWD en su sudoers archivo

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: