Restaurar a funcionalidade 'cd ..' depois de seguir um link simbólico

13

Se eu criar um link simbólico no terminal com um comando como

ln -s /path/to/some/directory symbolicLink

e siga o link com

cd symbolicLink

o terminal parece pensar que o cwd está ~/symbolicLink/sendo exibido ~/path/to/some/directory/(assumindo que o link foi feito ~, é claro). O que isso significa é que, se eu digitar cd .., sou levado de volta ~, porque o terminal 'pensa' que este é o pai do cwd.

O que eu precisaria mudar para que cd .., em vez disso, me levasse ~/path/to/some/, ou seja, o verdadeiro pai ~/path/to/some/directory/?

Val
fonte

Respostas:

5

Há uma advertência sutil no cd -Pcomportamento (publicado como resposta por causa do comprimento):

$ dir1=$(mktemp --directory)
$ dir2=$(mktemp --directory)
$ ln -s -- "$dir1" /tmp/start
$ ln -s -- "$dir2" "$dir1"
$ cd "/tmp/start/"*
$ cd -P ..

O que deve pwdimprimir agora? Logicamente, pode ser

  1. $dir1, Se cd -P ..faz cd ..em primeiro lugar e cd -- "$(readlink -f)"depois, ou
  2. /tmp, se cd -P ..faz cd -- "$(readlink -f)"primeiro e cd ..depois.

De fato, ele faz o último, o que significa que pwdé intuitivamente dois níveis mais alto que o diretório "pai".

l0b0
fonte
1
Obrigado! cd -Painda resolve o problema que estava enfrentando, mas ainda é útil saber.
Val
2

Uma maneira alternativa é executar:

cd $(/bin/pwd)/..
jlliagre
fonte
2

Sinto sua dor - considero bashbasicamente prejudicada para uso interativo por causa desse comportamento.

tcshé um shell muito mais amigável para uso interativo. Deixe bashpara programação (se você insistir em escrever scripts de shell quando houver alternativas muito melhores entre as muitas linguagens de script).

Para alterar shells para qualquer usuário, digite chshna linha de comando e siga as instruções (novamente, eu recomendo /bin/tcshe o excelente livro da O'Reilly Using csh e tcsh , disponível para quase nada usado).

dodgethesteamroller
fonte
Desde que escrevi essa resposta, aprendi a parar de me preocupar e a amar o Bash pelo uso interativo. Mas ainda não consigo lidar com o cdcomportamento padrão dos links simbólicos. Eu tenho que lembrar de colocar set -o physicalna minha .bashrcou .bash_profilepara todas as máquinas que eu uso.
Dodgethesteamroller