Pour imprimer la variable $PWD
et la commande d' environnement du répertoire de travail actuel / présent pwd
sont disponibles. Alors, quelle est la différence d'utilisation des deux? ou Que faut-il choisir dans un but précis?
la source
Pour imprimer la variable $PWD
et la commande d' environnement du répertoire de travail actuel / présent pwd
sont disponibles. Alors, quelle est la différence d'utilisation des deux? ou Que faut-il choisir dans un but précis?
Cela dépend de ce que vous faites. Tout d'abord, $PWD
est une variable d'environnement et pwd
est 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 $PWD
sauf si vous utilisez l' -P
indicateur. 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 pwd
binaire, 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), pwd
et echo $PWD
sont équivalents, sauf si vous utilisez l' -P
option, mais /bin/pwd
est 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
:Cela signifierait que l'exécution
pwd -P
dans 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/run
qui pointe vers/run
et que vous êtes actuellement dans le/var/run/
répertoire, exécutezretournera:
et sera le même pour
pwd
. Cependant, si vous exécutez:reviendra
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 -P
etecho $PWD
est lorsqu'il existe des liens symboliques.la source