Disons que vous avez des répertoires /dir1
et /dir2/linked
, où ce dernier est un lien symbolique vers le premier.
Lorsque vous accédez cd
à linked
et pwd
, vous obtenez la sortie /dir2/linked
. Si vous alorscd ..
, vous serez mis /dir2
. Ce comportement est cohérent avec le concept que vous étiez /dir2/linked
avant. Cependant, si je comprends bien, le répertoire parent ( ..
) de tout répertoire est stocké dans le répertoire inode (c'est-à-dire: physiquement sur le disque). De toute évidence, puisque /dir2/linked
c'est vraiment /dir1
, le répertoire parent sur l'inode doit être/
Pour compliquer encore les choses, à l’intérieur /dir2/linked
, les sorties ls ..
etcd .. ; ls .
sont différentes! Il semble cd
honorer le chemin du lien symbolique, tout en honorant le chemin ls
"physique". Comme mentionné dans cette question , il y a cependant cd -P
ce cas d'utilisation.
man pwd
mentionne les répertoires de travail "physiques" et "logiques", mais j'ai encore quelques questions à ce stade:
- Ce comportement est-il toujours fourni par la
PWD
variable d'environnement, comme mentionné dansman pwd
? - Pourquoi faire par défaut
cd
etls
avoir des comportements différents, si ce sont deux commandes shell (c'est-à-dire: pas des programmes)? - Le programme typique (pas la commande shell) utilise-t-il à la
PWD
place du chemin physique? Je me rends compte que c'est à la mise en œuvre, mais y a-t-il une règle d'or?
la source
Réponses:
bash
"connaît" les liens symboliques et suit ces informations lorsque vous utilisez un lien symbolique pour entrer dans un répertoire.Vous pouvez vérifier cela en procédant comme suit dans votre exemple:
Vous devez commencer le bash avec un vide
PWD
variable , sinon il utilise cette astuce pour afficher le "faux" chemin.Notez qu'il
ls
s'agit d' un programme distinct et que, en tant que tel, il n'a pas la connaissance de bash sur la façon dont vous êtes arrivé dans le répertoire en cours, il vousls ..
suffit donc d'afficher le contenu du véritable répertoire parent, sans rapport avec le lien symbolique que vous avez suivi.La plupart des programmes ne dépendront pas de la variable d'environnement
CWD
car il existe de nombreuses façons de démarrer des programmes, via le shell bash en est un, il n'est donc pas fiable de s'attendreCWD
à contenir la valeur correcte (essayez de définirCWD
quelque chose de mal avant de le fairebash -c pwd
, vous pouvez le voir vérifier la valeur pour la raison).la source
PWD
ainsi, mais en soi cela ne répond pas aux questions que j'ai mentionnéesls
été fournie par bash, mais vous ethelp
m'a convaincu du contraire. Cela rend les choses beaucoup plus claires, merci!PWD
est standard dans POSIX. Vous pouvez vous y fier pour être réglé. S'il n'est pas défini, les choses pourraient se casser, par exemple l'pwd
utilitaire : Voir aussi Variables d'environnement .