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 .