Seu sistema (como muitos sistemas Unix) não possui um comando cd externo (pelo menos não nesse caminho). Mesmo que tivesse um, o ls daria a lista de diretórios do diretório original. Um comando externo nunca pode mudar o diretório do processo de chamada (seu shell) 1 .
Remova o alias do ambiente com unalias cd (e também remova sua definição de qualquer arquivo de inicialização que você tenha adicionado).
Com uma função de shell, você pode fazê-lo funcionar como o cd normalmente, com uma invocação extra de ls no final, se o cd tiver êxito:
cd () {
command cd "$@" && ls -lah
}
ou
cd () { command cd "$@" && ls -lah; }
Isso chamaria o comando cd embutido em seu shell com os mesmos argumentos de linha de comando que você forneceu à função. Se a mudança de diretório foi bem sucedida, o ls seria executado.
O comando command impede que o shell execute a função recursivamente.
A definição da função (como escrita acima) entraria no arquivo de inicialização do seu shell. Com bash , isso pode ser ~/.bashrc . A definição da função estaria então ativa na próxima nova sessão de shell interativa . Se você quiser que ele esteja ativo agora , execute a definição da função como está no prompt do shell interativo, que irá defini-lo dentro de sua sessão interativa atual.
1 Em sistemas em que cd está disponível como um comando externo, esse comando também não altera o diretório do processo de chamada. O único uso real para tal comando é fornecer conformidade POSIX e para agir como um teste de se alterar o diretório para um determinado seria possível .