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

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

Eu tenho diretórios configurados um pouco assim

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

Esse último é um link simbólico.

Se eu fizer isso

cd ~/code/build
ls ..

então recebo a listagem de /path/to/somewhere, mas deOutras observaçõese por minha própria experiência, eu esperava ver a listagem ~/code- eu juro que isso costumava funcionar ao contrário.

Estou usando zsh e bash no Ubuntu. Existe uma configuração para isso ou está profundamente enraizado no POSIX ou algo assim?

Responder1

Não é a questão de ls. É assim que os links simbólicos funcionam. Isso ..leva você ao pai do diretório atual, o diretório não sabe que você o acessou por meio de um link simbólico. O shell deve intervir para evitar esse comportamento. Para o shell embutido cd, há um tratamento especial que não apenas chama, chdirmas memoriza o caminho completo do diretório e tenta descobrir o que você deseja. ls, no entanto, não é um recurso interno. O shell precisa mudar ..para um caminho diferente antes de passá-lo lsse você quiser obter o que espera. zshopção CHASE_DOTSajuda você com isso.

De modo geral, links simbólicos para diretórios são um negócio sujo. Para aplicações críticas e semipermanentes, use mount --bind.

Responder2

Já que você marcou sua pergunta com, zshpresumo que estamos falando sobre esse shell.

Muito provavelmente você definiu (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 chasee veja se eles estão listados. Se estiverem, basta desmarcá-los:

unsetopt CHASE_DOTS
unsetopt CHASE_LINKS

informação relacionada