ls .. não funciona corretamente com links simbólicos

2

Eu tenho diretórios configurados um pouco como este

~/code
~/code/src
~/code/build -> /path/to/somewhere/else

Esse último é um link simbólico.

Se eu fizer isso

cd ~/code/build
ls ..

depois, obtenho a listagem de /path/to/somewhere , mas de outras observações e minha própria experiência, eu esperava ver a listagem de ~/code - eu juro que isso costumava funcionar ao contrário.

Estou usando o zsh e o bash no Ubuntu. Existe uma configuração para isso ou ela está profundamente enraizada no POSIX ou algo do tipo?

    
por spraff 25.01.2015 / 17:35

2 respostas

4

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 .

    
por 25.01.2015 / 20:20
0

Como você marcou sua pergunta com zsh , presumo que estamos falando sobre esse shell.

Provavelmente você configurou (direta ou indiretamente com algum script externo como oh-my-zsh ) as variáveis CHASE_LINKS e / ou CHASE_DOTS . Para confirmar isso, execute setopt | grep -i chase e veja se eles estão listados. Se estiverem, basta desmarcá-los:

unsetopt CHASE_DOTS
unsetopt CHASE_LINKS
    
por 25.01.2015 / 19:57