Si je crée un lien symbolique dans le terminal avec une commande comme
ln -s /path/to/some/directory symbolicLink
puis suivez le lien avec
cd symbolicLink
le terminal semble penser que le cwd est ~/symbolicLink/
même s’il montre en fait ~/path/to/some/directory/
(en supposant que le lien a été établi dans ~
, bien sûr). Cela signifie que si je tape ensuite cd ..
je suis ramené à ~
, car le terminal “pense” qu’il s’agit du parent du cwd.
Que devrais-je changer pour que cd ..
me conduise plutôt vers ~/path/to/some/
, c’est-à-dire le vrai parent de ~/path/to/some/directory/
?
Voir https://stackoverflow.com/questions/10456784/behavior-of-cd-bash-on-symbolic-links .
Vous pouvez utiliser ‘cd -P’ pour accéder au “vrai” répertoire parent. Voir le premier commentaire sur la première réponse sur la façon de définir ce comportement par défaut.
Il y a une mise en garde subtile dans le comportement cd -P
(posté comme réponse en raison de la longueur):
$ dir1=$(mktemp --directory) $ dir2=$(mktemp --directory) $ ln -s -- "$dir1" /tmp/start $ ln -s -- "$dir2" "$dir1" $ cd "/tmp/start/"* $ cd -P ..
Qu’est-ce que pwd
devrait imprimer maintenant? Logiquement, cela pourrait être soit
$dir1
, si cd -P ..
fait cd ..
abord et cd -- "$(readlink -f)"
après, ou /tmp
, si cd -P ..
fait cd -- "$(readlink -f)"
premier et cd ..
par la suite. En fait, il s’agit de la dernière pwd
, ce qui signifie que pwd
est intuitivement deux niveaux plus élevé que le répertoire “parent”.
Une autre solution consiste à exécuter:
cd $(/bin/pwd)/..
Je ressens votre douleur – je considère que bash
est fondamentalement cassé pour une utilisation interactive à cause de ce comportement.
tcsh
est un shell beaucoup plus convivial pour une utilisation interactive. Laissez bash
pour la programmation (si vous insistez pour écrire des scripts shell alors qu’il existe de bien meilleures alternatives parmi les nombreux langages de script).
Pour changer de shell pour tout utilisateur, tapez chsh
sur la ligne de commande et suivez les invites (encore une fois, je recommande /bin/tcsh
et l’excellent livre O’Reilly Using csh and tcsh , disponible pour presque rien).