-bash: / bin / cd: Nenhum arquivo ou diretório - execute automaticamente ls após o cd

6

Eu acidentalmente destruí meu comando cd .

Eu tentei executar automaticamente ls após cd ser chamado.

Encontrei uma postagem dizendo que tenho que executar alias cd='/bin/cd && /bin/ls' , mas agora recebo -bash: /bin/cd: No such file or directory e não consigo mais alterar o directoy.

    
por Black 25.06.2018 / 16:26

3 respostas

23

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 .

    
por 25.06.2018 / 16:34
7

Consegui resolvê-lo removendo o alias novamente com unalias cd

    
por 25.06.2018 / 16:29
5

Isso aconteceu porque:

$ type cd

cd is a shell builtin
    
por 25.06.2018 / 16:33