J'ai créé un lien logiciel ( ln -s 1 2
) vers un répertoire qui se trouve dans le test
répertoire et j'ai ouvert le lien cd 2
logiciel ( ) et affiché le chemin actuel à l'aide de pwd
. Le chemin affiché était ~/test/2
et non ~/test/1
.
C'est différent dans un OS comme Windows, le raccourci nous amène au vrai répertoire. Je suis un peu confus sur la façon dont ce lien logiciel fonctionne sous Linux. N'est-ce pas un raccourci comme dans Windows
? Pourquoi le chemin n'est ~/test/1
-il pas ?
$ mkdir test
$ cd test
$ mkdir 1
$ ln -s 1 2
$ cd 2
$ pwd
/home/dazz/test/2
shell
symlink
cd-command
DScript
la source
la source
Réponses:
C'est une fonctionnalité du shell qui se souvient de la façon dont vous êtes arrivé là où vous êtes.
Si vous avez
realpath
installé, vous pouvez faire:Et à défaut si vous avez python:
ou readlink (de coreutils):
ou
/bin/pwd
(pas le shell intégrépwd
):la source
ls -l /proc/$$/cwd
tire parti de l'/proc
interface du système de fichiers du noyau .pwd -P
d'imprimer le chemin physique, au lieu de logique, vers le répertoire en cours.Contraste
pwd
et/bin/pwd
.pwd
, qui est une commande intégrée dans de nombreux shells, vous indique où votre shell pense que vous êtes (et traite donc les liens symboliques comme des "vrais liens")./bin/pwd
est un programme externe qui vous indique où vous êtes réellement, si nécessaire en parcourant l'arborescence du système de fichiers jusqu'à/
. Il ne prend pas en compte les liens symboliques car ceux-ci n'existent pas lors de la traversée vers le haut à travers..
la source
D'autres réponses ont couvert
/bin/pwd
vs le shellbuiltin pwd
.Si vous souhaitez suivre les liens symboliques dans le style Windows que vous avez mentionné, utilisez
cd -P
: cela changera la variable PWD en conséquence.Si vous souhaitez utiliser
-P
par défaut, vous pouvez ajouter cette ligne à votre.bashrc
ou.zshrc
:D'autres coquilles peuvent varier.
la source