Veja link .
Você pode usar 'cd -P' para ir para o diretório pai "real". Veja o primeiro comentário na resposta principal sobre como tornar esse comportamento padrão.
Se eu criar um link simbólico no terminal com um comando como
ln -s /path/to/some/directory symbolicLink
e depois siga o link com
cd symbolicLink
o terminal parece achar que o cwd é ~/symbolicLink/
, embora na verdade esteja exibindo ~/path/to/some/directory/
(supondo que o link tenha sido feito em ~
, é claro). Isso significa que, se eu digitar cd ..
, voltarei para ~
, porque o terminal "pensa" que é o pai da cwd.
O que eu preciso alterar para que cd ..
me leve a ~/path/to/some/
, ou seja, o pai real de ~/path/to/some/directory/
?
Há uma limitação sutil no comportamento cd -P
(postado como resposta por causa do tamanho):
$ dir1=$(mktemp --directory)
$ dir2=$(mktemp --directory)
$ ln -s -- "$dir1" /tmp/start
$ ln -s -- "$dir2" "$dir1"
$ cd "/tmp/start/"*
$ cd -P ..
O que deve pwd
imprimir agora? Logicamente, poderia ser
$dir1
, se cd -P ..
fizer cd ..
primeiro e cd -- "$(readlink -f)"
depois, ou /tmp
, se cd -P ..
fizer cd -- "$(readlink -f)"
primeiro e cd ..
depois. Na verdade, ele faz o último, significando que pwd
é intuitivamente dois níveis mais altos que o diretório "pai".
Uma maneira alternativa é executar:
cd $(/bin/pwd)/..
Sinto sua dor - considero que bash
está basicamente quebrado para uso interativo devido a esse comportamento.
tcsh
é um shell muito mais fácil de usar para uso interativo. Deixe bash
para programação (se você insistir em escrever scripts shell quando houver alternativas muito melhores entre as muitas linguagens de script).
Para alterar shells para qualquer usuário, digite chsh
na linha de comando e siga os prompts (novamente, eu recomendo /bin/tcsh
e o excelente livro O'Reilly Usando csh e tcsh , disponível para quase nada usado).