¿Cuál es la diferencia entre Unix incorporado en `comando pwd` y de variable de entorno $ PWD?

StackOverflow https://stackoverflow.com/questions/4362643

  •  09-10-2019
  •  | 
  •  

Pregunta

Este es el caso. Tengo una llamada directorio: - % / Home / myname /

Me hizo un enlace blando en ese directorio: - % Cd / home / myname / % Ln -s / home / otras /.

Ahora, CD en otros / desde / home / myname / Aquí está la parte interesante.

Cuando hice un Unix comando integrado pwd, me sale el nombre de la ruta original: - % / Home / otros /

Pero cuando me hago eco de la variable de entorno $ PWD, me sale el nombre de la ruta de enlace: - % / Home / myname / otros /

¿Por qué es así?

¿Fue útil?

Solución

/var# ls -l
lrwxrwxrwx  1 root root   10 Aug 22 13:21 mail -> spool/mail
drwxr-xr-x  2 root root 4096 Jul  1 20:58 opt
drwxr-xr-x 22 root root 4096 Dec  5 17:38 run
drwxr-xr-x 12 root root 4096 Aug 22 13:21 spool
drwxrwxrwt 14 root root 4096 Dec  6 02:46 tmp
/var# cd mail
/var/mail# echo $PWD
/var/mail

/var/mail# pwd
/var/mail

/var/mail# /bin/pwd
/var/spool/mail

En otras palabras, el uso de $PWD es suficiente, porque no pwd que podría dar mejores resultados (por cualquier definición de la mejor) de todos modos.

¿Por que es? /bin/pwd usa llamadas OS-específicas para determinar el directorio de trabajo actual -. y en caso de Linux, el núcleo sólo mantiene el directorio resuelto (ver /proc/self/cwd), mientras que las personas con discapacidad de la cáscara contienen lo que piensa la cáscara es en

Otros consejos

La diferencia entre el comando externo /bin/pwd y el built-in es que el comando externo no sabe qué conjunto de operaciones cd tienes ahí y por lo tanto no pretende que el directorio actual es en algún lugar de una cadena de enlaces simbólicos; que le da el camino directo desde la raíz hasta el directorio actual, en lugar de funcionar realpath() haría.

Ver set -o physical en bash.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top