Qual é o nome do comando (função) executado após a falha de um comando?

-1

Quando executar um comando, se o comando não estiver presente, algumas informações sobre a falha do comando serão exibidas.

Estou tentando obter as informações sobre esse comando com falha como entrada para meu script, que precisa ser executado automaticamente sempre que o comando falhar.

Sempre que o comando falhar, o valor $? será 127 . Eu tenho que pegar esse evento com falha e executar meus comandos lá.

    
por Ankanna 10.07.2016 / 19:52

2 respostas

3

Eu tenho este fragmento no meu /etc/bash.bashrc (Ubuntu 14.04.4 LTS):

# if the command-not-found package is installed, use it
if [ -x /usr/lib/command-not-found -o -x /usr/share/command-not-found/command-not-found ]; then
    function command_not_found_handle {
            # check because c-n-f could've been removed in the meantime
                if [ -x /usr/lib/command-not-found ]; then
           /usr/lib/command-not-found -- "$1"
                   return $?
                elif [ -x /usr/share/command-not-found/command-not-found ];     then
           /usr/share/command-not-found/command-not-found -- "$1"
                   return $?
        else
           printf "%s: command not found\n" "$1" >&2
           return 127
        fi
    }
fi

Parece que você deve sobrescrever a função command_not_found_handle . Não sei se o pacote command-not-found é necessário para que isso funcione; Eu acho que não, mas posso estar errado.

Exemplo:

function command_not_found_handle { echo BOOM! ; }

Resultado:

$ foo12345
BOOM!
$ echo "echo is valid command"
echo is valid command
$ agrgokdnlkdgnoajgldfnsdalf grhofhadljh
BOOM!
$ cat /etc/issue
Ubuntu 14.04.4 LTS \n \l

$ catt /etc/issue
BOOM!

Para reverter (rápido e sujo):

# Assuming you haven't modified /etc/bash.bashrc
. /etc/bash.bashrc
# Quick and dirty, because if your ~/.bashrc or ~/.bash_profile //
# overwrites some settings from /etc/bash.bashrc //
# you need to source them again.
# Things may get complicated, I won't cover all the ifs here.
# Logout and login again for the clean start.

Modifique /etc/bash.bashrc para alterar o comportamento "comando não encontrado" para todos os usuários. Defina seu próprio command_not_found_handle in ~/.bashrc para que ele funcione apenas para você. Ou escreva dois arquivos com definições de função adequadas para ativar e desativar seu hack a qualquer momento. Importante: não execute os arquivos, fonte-los assim:

. ~/.hack_enable
. ~/.hack_disable

Onde .hack_enable define sua função, .hack_disable volta para a original (do primeiro bloco de código da minha resposta ou para algo semelhante, o que está correto no seu caso).

    
por 10.07.2016 / 23:00
-1

Experimente o seguinte script:

if command ; then
    echo "Command succeeded"
 else
    echo "Command failed"
fi

Assim você pode executar o código que quiser em cada caso.

    
por 10.07.2016 / 21:52