Quelle est la différence entre unix intégré commande `pwd` et il est variable d'environnement $ PWD?

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

  •  09-10-2019
  •  | 
  •  

Question

Voici le cas. J'ai un appel répertoire: - % / Home / myname /

je l'ai fait un lien souple dans ce répertoire: - % Cd / home / myname / % Ln -s / home / autres /.

Maintenant, je cd dans d'autres / de / home / myname / Voici la partie intéressante.

Quand je fait un unix intégré commande pwd, je reçois le chemin ORIGINAL: - % / Home / autres /

Mais quand je fais l'écho de la variable d'environnement $ PWD, je reçois le chemin du lien: - % / Home / myname / autres /

Pourquoi est-ce donc?

Était-ce utile?

La solution

/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 d'autres termes, en utilisant $PWD est suffisante, car pwd pourrait ne pas vous donner de meilleurs résultats (pour une définition plus) de toute façon.

pourquoi? /bin/pwd utilise des appels spécifiques à l'OS pour déterminer le répertoire de travail courant -. et en cas de Linux, le noyau ne conserve que le répertoire résolu (voir /proc/self/cwd), alors que les pwds de la coquille contiennent ce que la coquille pense qu'il est dans

Autres conseils

La différence entre la /bin/pwd commande externe et intégré est que la commande externe ne sait pas ce ensemble d'opérations de cd vous prétendre qu'il a obtenu et n'a donc pas que votre répertoire courant est quelque part une chaîne de liens symboliques; il vous donne le chemin direct de la racine à votre répertoire courant, un peu comme la fonction realpath() serait.

Voir set -o physical en bash.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top