Alterando o diretório pai (../) com links simbólicos


32

Eu tenho um link simbólico

~/link -> ~/a/really/long/path

Quando eu faço

cd ~/link
cd ..    

isso me leva a

~

mas eu quero ir para

~/a/really/long

Existe uma maneira de fazer isso?

Estou usando o bash.


1
Você quer dizer cd ~/a/really/long/pathentão cd ..coloca você no ~momento? Eu não posso reproduzir isso.
11117 Mikel

1
@ Mikel: Não, primeiro crie um link simbólico para o ~/a/really/long/pathCD e depois para o CD ... Você deve voltar ao ~ (assumindo que foi onde começou).
Xodarap

Minha edição está correta? Eu não conseguia entender a pergunta antes.
11117 Mikel

Respostas:


38

O Bash (assim como o ksh, zsh e até o ash) rastreia as alterações no diretório, para que cd /foo/bar && cd ..você sempre o leve até /foomesmo se barfor um link simbólico. Passe a -Popção para cdignorar a alteração rastreada e siga a estrutura de diretórios "físico":

cd -P ..

Consulte help cdou man builtinspara obter documentação sobre o bash embutido cd. Se você realmente não gosta do recurso de rastreamento de diretório, pode desativá-lo set -Pno bash ( set -o no_chase_linkno zsh).


1
A maneira como li a pergunta, o OP já definiu -Pou -o physicaljá?
11117 Mikel

+1, mas sugira um link para a página do manual.
Faheem Mitha

@ Mikel: Não, a pergunta diz que ele está seguindo o link simbólico, não a estrutura do diretório físico.
Faheem Mitha

Desculpe, na verdade, não tentei editar sua postagem. Edição sugerida enviada agora.
Faheem Mitha

4

Você também pode usar o readlink para encontrar o caminho físico para este diretório e, em seguida, vá um diretório mais alto:

cd $(readlink -f .)/..

3

Um método que você pode usar é usar um alias em vez de um link simbólico para levá-lo ao caminho ~ / a / really / long /. Esse é o método que eu uso, desde então eu posso apenas digitar um simples comando 1/2 / et cetera letter em vez de cd symlink

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.