Restaurer la fonctionnalité 'cd ..' après avoir suivi un lien symbolique

13

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/bien qu'il soit réellement affiché ~/path/to/some/directory/(en supposant que le lien a été établi en ~, bien sûr). Cela signifie que si je tape ensuite, cd ..je suis renvoyé à ~, car le terminal «pense» que c'est le parent du cwd.

De quoi aurais-je besoin pour changer de façon à ce que cd ..cela m'amène plutôt ~/path/to/some/, c'est -à -dire le vrai parent de ~/path/to/some/directory/?

Val
la source

Réponses:

5

Il y a une mise en garde subtile dans le cd -Pcomportement (publié 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 ..

Que devrait pwdimprimer maintenant? Logiquement, cela pourrait être soit

  1. $dir1, si c'est le cd -P ..cas cd ..avant et cd -- "$(readlink -f)"après, ou
  2. /tmp, si c'est le cd -P ..cas en cd -- "$(readlink -f)"premier et cd ..ensuite.

En fait, il fait ce dernier, ce qui signifie pwdintuitivement deux niveaux plus élevés que le répertoire "parent".

l0b0
la source
1
Merci! cd -Présout toujours le problème auquel j'étais confronté, mais il est toujours utile de le savoir.
Val
2

Une autre manière consiste à exécuter:

cd $(/bin/pwd)/..
jlliagre
la source
2

Je ressens votre douleur - je considère bashqu'elle est fondamentalement brisée pour une utilisation interactive à cause de ce comportement.

tcshest un shell beaucoup plus convivial pour une utilisation interactive. Partez bashpour 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 les shells pour n'importe quel utilisateur, tapez chshsur la ligne de commande et suivez les invites (encore une fois, je recommande /bin/tcshet l'excellent livre O'Reilly Using csh et tcsh , disponible pour presque rien utilisé).

dodgethesteamroller
la source
Depuis que j'ai écrit cette réponse, j'ai appris à cesser de m'inquiéter et à aimer Bash pour une utilisation interactive. Mais je ne peux toujours pas gérer le cdcomportement par défaut des liens symboliques. Je dois me rappeler de mettre set -o physicalma .bashrcou .bash_profilepour chaque machine que j'utilise.
dodgethesteamroller