Quelle est la différence entre unix intégré commande `pwd` et il est variable d'environnement $ PWD?
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?
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
.