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, chdir
mas 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 ls
se você quiser obter o que espera. zsh
opção CHASE_DOTS
ajuda 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, zsh
presumo 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 chase
e veja se eles estão listados. Se estiverem, basta desmarcá-los:
unsetopt CHASE_DOTS
unsetopt CHASE_LINKS