Você pode usar o DEBUG
trap para fazer isso. Nesta armadilha, $BASH_COMMAND
contém o último comando executado.
trap 'echo "you tried to call the command [$BASH_COMMAND]"' DEBUG
Observe que, se você estiver executando comandos como parte de seu prompt ou $PROMPT_COMMAND
, o trap também será executado nesses comandos. Você pode adicionar verificações para ver se $BASH_COMMAND
é o mesmo que $PROMPT_COMMAND
para evitar algumas delas.
Quanto à execução quando o comando não existe, no bash, se uma função chamada command_not_found_handle
existe, essa função é executada sempre que um comando não é encontrado. Ele é executado com todos os argumentos da linha de comando que você tentou executar como argumentos, para que você possa fazer algo assim:
command_not_found_handle() {
echo "you tried to call the command [$@]"
}
Isso resulta em:
$ foo bar
you tried to call the command [foo bar]
$