Não é o problema de ls
. É como os links simbólicos funcionam. O ..
coloca você no pai do diretório atual, o diretório não sabe que você chegou a ele através de um symlink. O shell tem que intervir para evitar esse comportamento. Para o shell embutido cd
, existe um tratamento especial que não chama apenas chdir
, mas memoriza o caminho completo do diretório e tenta descobrir o que você deseja. ls
, no entanto, não é interno. O shell tem que alterar ..
para um caminho diferente antes de passá-lo para ls
se você deseja obter o que espera. zsh
option CHASE_DOTS
ajuda você com isso.
De um modo geral, links simbólicos para diretórios são um negócio sujo. Para aplicações críticas e semi-permanentes, use mount --bind
.