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.

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

Gilles 'SO- parar de ser mau'
fonte
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 .)/..
dhasenan
fonte
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

Wipqozn
fonte