Execute dois comandos se o primeiro falhar

1

Estou escrevendo um script.sh como:

ls a || ls > /dev/null || echo "both command fails"; exit 3
echo 5 # not showed up

Espero que o exit 3 seja executado apenas quando o comando1 e o comando2 falharam. Mas parece que, mesmo se ls > /dev/null estiver ok, o exit 3 ainda disparado fará com que echo 5 nunca apareça.

Tudo o que posso fazer para corrigir isso?

    
por AGamePlayer 06.09.2015 / 10:43

1 resposta

3

O problema é que || liga mais que ; , então sua primeira linha consiste em dois comandos: o primeiro é um comando composto: ls || ls || echo e o segundo é apenas exit 3 . Como mencionado em um comentário do meuh, você deve escrever

ls a || ls > /dev/null || { echo "both command fails"; exit 3; }
echo 5 # not showed up
    
por 06.09.2015 / 11:29

Tags