Uma causa provável para a aparente diferença na saída de ls -l
entre zsh e bash é o uso de Tab
-completion com AUTO_REMOVE_SLASH
ativado em zsh (que é o padrão).
AUTO_REMOVE_SLASH <D>
When the last character resulting from a completion is a slash and the next character typed is a word delimiter, a slash, or a character that ends a command (such as a semicolon or an ampersand), remove the slash.
Ao digitar ls -l symb
Tab , ambos zsh
e bash
concluirão isso para ls -l symboliclink/
(observe o /
no final). A diferença é que zsh
(com habilitado AUTO_REMOVE_SLASH
) irá remover a barra, se você simplesmente pressionar Enter (ou seja, encerrar o comando) lá.
Assim, você executará efetivamente ls -l symboliclink/
em bash , o que informará ls -l
a procurar por trás do link. Mas em zsh você executará ls -l symboliclink
, informando ao ls -l
que você deseja ver as informações sobre o link e não sobre o diretório de destino.
ls
sem opção -l
sempre mostrará o conteúdo do diretório de destino, independentemente de haver /
no final ou não.
Para que o zsh não remova a barra no final, basta digitar explicitamente após TAB
-completion. Geralmente isso não irá alterar visivelmente o texto completo, mas se você digitar um espaço ou confirmar o comando, o /
permanecerá. "Geralmente" porque é possível definir um realce para caracteres de sufixo adicionados automaticamente, por exemplo, magenta e negrito:
zle_highlight[(r)suffix:*]="suffix:fg=magenta,bold"
( Observação: isso pode não funcionar ao usar o plug-in de realce de sintaxe do ZSH )
Outra solução é (obviamente) desabilitar AUTO_REMOVE_SLASH
. Isso pode ser feito com
setopt noautoremoveslash