Mostra qual comando falhou

1

command1 && command2 && echo "OK" || echo "FAIL"

Isso imprimirá OK se os dois comandos forem bem-sucedidos ou FAIL se um dos comandos falhar.

Como posso modificar isso para imprimir:

  • OK se ambos os comandos forem bem sucedidos,
  • FAIL 1 if command1 falhou e
  • FAIL 2 se command2 falhou?
por An Ma 22.01.2016 / 16:12

3 respostas

0

Usar chaves para agrupar comandos (sem criar um subshell) funcionará:

command1 && { command2 && echo OK || echo FAIL2 } || echo FAIL1

Se command1 falhar, command2 não será exibido, você receberá apenas FAIL1 .

Eu também acho que essa construção não é muito legível. Eu acho que usar && funciona bem para casos simples, mas para condicionais mais complicados, eu prefiro usar if declarações.

    
por 22.01.2016 / 16:40
0

Existem muitas maneiras, por exemplo:

if ! command1; then
    echo 'FAIL 1'
elif ! command2; then
    echo 'FAIL 2'
else
    echo 'OK'
fi

Se o objetivo é apenas depurar rapidamente um script Bash, considere o uso da opção -x :

Print commands and their arguments as they are executed.

    
por 22.01.2016 / 16:26
0

Você também pode definir uma variável ( a ) e escrever somente no final que foi o comando com falha

 a=1 && cmd2 && a=2 && cmd1 && a=0 && echo ok || echo fail $a

Você pode usar esse valor mais tarde no script ... por esse motivo, após o último comando, você pode redefinir o valor para 0.

não é elegante, mas de alguma forma funciona. : -)

    
por 22.01.2016 / 16:41