Qu'est-ce que $ PWD? (vs répertoire de travail actuel)

27

Donc Wikipédia ( lien ) me dit que la commande pwdest l'abréviation de "imprimer le répertoire de travail", et cela a du sens.

Mais pour la variable d'environnement, le "P" doit être un acronyme pour autre chose que print.

J'entends des gens parler de "répertoire de travail actuel", qui sonne mieux et est plus intuitif, mais la variable d'environnement semble toujours s'appeler $ PWD, et non $ CWD. Personne n'a jamais dit "Avez-vous vérifié la variable du répertoire de travail d'impression?".

Je joue actuellement avec le serveur d'applications Web uWSGI, et lors de son exécution, il me dit (sur la page de statistiques uWSGI):

"cwd":"/home/velle/greendrinks",

ils évidemment comme le (acronyme plus intuitive) cwdsur pwd.

Je suppose que j'essaie de comprendre si j'ai mal compris quelque chose, ou s'il s'agit simplement d'avoir donné à la variable d'environnement un nom non intuitif?

Mads Skjern
la source
5
Répertoire de travail actuel?
DarioP
3
Je soupçonne que vous y pensez trop. $PWDest équivalent à `pwd`, et c'était une justification suffisante.
cet autre gars
1
Une autre supposition: répertoire de travail de processus?
oxfn

Réponses:

23

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]

    Imprime le nom du répertoire de travail actuel.

    Options:

      -L
          afficher la valeur de $PWD s'il nomme le répertoire de travail courant
      -P
          imprimer le répertoire physique, sans aucun lien symbolique

    Par défaut, 'pwd' se comporte comme si '-L' était spécifié.

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 ils /bin/pwdsont différents et se comportent comme pwd -P.

Source /ubuntu//a/476633/291937

Thushi
la source
1
@llua Rien n'interdit PWDd'être une variable d'environnement. C'est en fait le cas par défaut avec la plupart sinon tous les shells et cela a du sens de le fournir aux processus enfants.
jlliagre
1
Je me demande pourquoi les gens ont voté contre, cela semble être une bonne réponse et bien expliqué.
Mads Skjern
2
@MadsSkjern La plupart des commandes internes sont requises par la norme POSIX pour être également disponibles sous forme de commandes. Cela permet de les appeler directement à partir d'autres programmes sans avoir à lancer un shell.
jlliagre
2
Cela ne répond pas vraiment à la question. La question n'est pas vraiment sur les différences entre $PWDet pwd(qui ont déjà été couvertes sur U&L avant je crois), mais sur les raisons qui ont conduit à nommer la variable " PWD".
John WH Smith,
1
@Thushi Vous avez plus que probablement raison. PWD a été introduit par ksh88quel document il est le suivant: PWD The present working directory set by the cd command.Vous devez l'ajouter à votre réponse.
jlliagre
15

$ PWD est le P athname du courant W ravailler D irectory

Lorsqu'il y a des liens symboliques, les résultats peuvent différer de la lecture de $ PWD à l'exécution de la commande pwd .

jcbermu
la source
Pourriez-vous donner un exemple de la façon d'obtenir différentes valeurs pour $PWDet pwd?
Mads Skjern