Como faço um prompt “command not found” personalizado para o terminal?

5

Eu quero fazer um prompt "command not found" personalizado para o terminal, como este . Eu tenho o modelo configurado:

   ___________________________________________
  / I see you're trying to use the terminal … \
 | Command not found:                        |
 |                                           |
 |  xxx                                      |
 |                                           |
  _____ ____________________________________/
        v
       ╭─╮
       ⌾ ⌾
       │▕│
       ╰─╯

Eu quero que o "xxx" seja substituído pelo comando incorreto. Como eu poderia conseguir isso?

    
por Cameron R. 09.06.2015 / 02:03

1 resposta

5

Quando o bash não consegue encontrar um nome de comando, ele executa a função command_not_found_handle com o comando original e seus argumentos como argumentos. Então defina o seu próprio. Isso vai para o seu ~/.bashrc . Certifique-se de imprimir no erro padrão, não na saída padrão, e retornar o mesmo status de saída, caso contrário, isso pode causar interrupções nos fragmentos de script de shell executados dentro dessa instância do bash.

command_not_found_handle () {
  local cmd
  printf -v cmd "%-40s" "${cmd:0:40}"
  cat >&2 <<EOF
   ___________________________________________
  / I see you're trying to use the terminal … \
 | Command not found:                        |
 |                                           |
 |  $cmd |
 |                                           |
  _____ ____________________________________/
        v
       ╭─╮
       ⌾ ⌾
       │▕│
       ╰─╯

EOF
  return 127
}
    
por 09.06.2015 / 02:16