pwd sin enlaces simbólicos

54

Si lo hago pwd, noto que usa los enlaces simbólicos que utilicé para ingresar al directorio actual. ¿Puedo hacer que me diga el directorio "real" en el que estoy ... es decir, la ruta desde la raíz a mi directorio actual sin el uso de ningún enlace simbólico?

JoelFan
fuente

Respuestas:

70

De acuerdo con la página de manual de POSIX pwd, la -Popción puede ser útil:

-P El nombre de ruta absoluto escrito no debe contener nombres de archivo que, en el contexto del nombre de ruta, se refieran a archivos de tipo enlace simbólico.

Así

$ pwd -P

debe ser lo que necesitas

Steven D
fuente
Me gustaría señalar que esta información se encuentra fácilmente escribiendo man pwdshell para encontrar opciones para este comando.
Chud37
7

El pwd shell incorporado utiliza la ruta que el shell realiza un seguimiento cuando usted cd(y lo almacena $PWD). Esto significa que si tiene un enlace simbólico a una ruta compleja (profunda), le dirá lo que escribió para cambiar a ese directorio en lugar de la ruta real. Esto se hace para darle lo que desea la mayor parte del tiempo.

/bin/pwdutiliza la getcwdllamada al sistema (que actualmente es una llamada a la biblioteca, lectura /proc/self/cwd) que devuelve la ruta canónica para el directorio actual, sin todos los recorridos de enlaces simbólicos.

Como Steven D señaló, pwdtiene la -Popción de ignorar $PWD. También tiene la -Lopción de devolver el contenido de $PWD. La página de manual para pwdno dice qué opción se usa por defecto, pero la experiencia me dice que la descripción anterior es correcta (shell pwdvs. /bin/pwd). Sin embargo, probablemente no deberías confiar en eso y solo usarlo pwd -P.

camh
fuente
2
El comportamiento que describe es el de los sistemas Linux donde /bin/pwdes GNU pwdcuando POSIXLY_CORRECT no está configurado. En sistemas POSIX donde pwdestá el /bin. /bin/pwdusará $ PWD y puede devolver rutas con enlaces simbólicos. GNU pwd se comportará de esa manera POSIX cuando encuentre una variable POSIXLY_CORRECT en su entorno.
Stéphane Chazelas