Réponses:
Cela dépend de ce que vous faites. Tout d'abord, $PWDest une variable d'environnement et pwdest un shell intégré ou un binaire réel:
$ type -a pwd
pwd is a shell builtin
pwd is /bin/pwd
Maintenant, la commande bash affichera simplement la valeur actuelle de $PWDsauf si vous utilisez l' -Pindicateur. Comme expliqué dans help pwd:
pwd: pwd [-LP]
Print the name of the current working directory.
Options:
-L print the value of $PWD if it names the current working
directory
-P print the physical directory, without any symbolic links
By default, `pwd' behaves as if `-L' were specified.
Le pwdbinaire, d'autre part, obtient le répertoire en cours via l' getcwd(3)appel système qui renvoie la même valeur que readlink -f /proc/self/cwd. Pour illustrer cela, essayez de vous déplacer dans un répertoire qui est un lien vers un autre:
$ ls -l
total 4
drwxr-xr-x 2 terdon terdon 4096 Jun 4 11:22 foo
lrwxrwxrwx 1 terdon terdon 4 Jun 4 11:22 linktofoo -> foo/
$ cd linktofoo
$ echo $PWD
/home/terdon/foo/linktofoo
$ pwd
/home/terdon/foo/linktofoo
$ /bin/pwd
/home/terdon/foo/foo
Donc, en conclusion, sur les systèmes GNU (tels que Ubuntu), pwdet echo $PWDsont équivalents, sauf si vous utilisez l' -Poption, mais /bin/pwdest différent et se comporte comme pwd -P.
Les deux renverront le même résultat si vous les utilisez sans options pour tous les répertoires de travail, y compris dans les liens symboliques.
Cependant, à partir de man pwd:
-P, --physical
avoid all symlinks
Cela signifierait que l'exécution pwd -Pdans des liens symboliques qui pointent vers d'autres répertoires affichera le chemin d'accès au répertoire d'origine.
Par exemple, si vous avez un lien symbolique /var/runqui pointe vers /runet que vous êtes actuellement dans le /var/run/répertoire, exécutez
echo $PWD
retournera:
/var/run
et sera le même pour pwd. Cependant, si vous exécutez:
pwd -P
reviendra
/run
Ainsi, cela dépend du chemin dont vous avez besoin: le chemin réel sans liens symboliques ou le répertoire actuel en ignorant les liens symboliques. La seule différence entre pwd -Pet echo $PWDest lorsqu'il existe des liens symboliques.