Seu shell rastreia os links simbólicos que o levaram ao seu diretório de trabalho atual. cd
é um shell integrado e help cd
states (exemplo de bash
):
Options:
-L
force symbolic links to be followed: resolve symbolic links in DIR after processing instances of..
-P
use the physical directory structure without following symbolic links: resolve symbolic links in DIR before processing instances of..
[…]
The default is to follow symbolic links, as if-L
were specified.
Você pode tentar cd -P ..
e ver a diferença. Outro exemplo é pwd -L
e pwd -P
(enquanto pwd
também é um shell embutido).
Observe que o comportamento padrão pode ser alterado por set -P
e set +P
. Veja help set
para mais detalhes.
Por outro lado, ls
é um executável separado que não se beneficia dessa capacidade de rastreamento do seu shell. No entanto, você pode seguir links simbólicos com este truque:
(cd -L .. && ls -l)
Basicamente, usamos cd
para alterar o diretório de trabalho atual em relação aos links simbólicos (e usei explicitamente a opção -L
padrão para isso) e invoco ls -l
. O operador &&
significa que ls
será executado somente se cd
for bem-sucedido. Parênteses ()
fazem com que tudo o que está dentro seja executado em uma subcamada. Este é o truque: o comando cd
afeta apenas este subshell e no seu shell principal nada muda, não há necessidade de cd
voltar.