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/?

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".


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

2

Uma maneira alternativa é executar:

cd $(/bin/pwd)/..

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).


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.