Verifique se houve um erro de uma linha no script

1

Eu quero colocar uma solução de verificação de erros no meu script, é assim:

! [ 'echo $?' != 0 ] || echo "omg, st went wrong, CTRL+C? 'read'"

Meu objetivo é quando essa linha é executada, verifique o "$?" - se não for 0, então diz "omg, st errou, CTRL + C?" então aguarda entrar, ou CTRL + C do usuário. Mas meu one-liner não está funcionando, porque ele espera por um enter antes de imprimir o "omg, st errou, CTRL + C?" texto. Alguém pode me ajudar o que estou perdendo?

Obrigado.

UPDATE: seria melhor fazer isso após o comando st como em: Verifique se houve um erro de uma linha no script

o "mau comando" é "uname -k" o bom comando é "echo hi" - o uname dá código de saída diferente de zero, o eco dá 0

    
por LanceBaynes 29.05.2011 / 23:58

3 respostas

2

Isso está correto; o 'read' será executado e o resultado será interpolado na string enviada para echo .

Você está fazendo isso da maneira mais difícil, com todas essas interpolações e tal.

if [[ $? -ne 0 ]]; then
    echo -n 'command failed.  ^C or "q" to abort.'
    read c
    [[ "$c" == q ]] && exit
fi
    
por 30.05.2011 / 00:03
0

obteve a solução:

$ uname -k || echo 'omg, fail' || read
uname: invalid option -- 'k'
Try 'uname --help' for more information.
omg, fail
$ echo hi || echo 'omg, fail' || read
hi
$ 

UPDATE: whoops, ele não aguarda entrar depois de imprimir o texto: \

    
por 30.05.2011 / 00:02
0

Quando escrevo scripts possivelmente de longa duração; Eu prefiro receber um aviso com um pop up. Por exemplo. com zenity

if [[ $? -ne 0 ]]; then
    if  zenity --question --text="Omg, something went wrong, do you wish to continue?"; then
    echo continue with program
    else
    echo "exiting" && exit; 
    fi
fi

Dessa forma, posso fazer outro trabalho e receber notificações se algo acontecer. Além disso, a mensagem de informação zenity geralmente é colocada no final do script.

    
por 30.05.2011 / 08:00

Tags