Ho bisogno di dipendere da alcune esecuzioni separate in uno script e non voglio raggrupparle tutte in una brutta 'se' istruzione. Vorrei prendere il codice di uscita '$?' di ogni esecuzione e aggiungila; alla fine, se questo valore supera una soglia, vorrei eseguire un comando.Aggiungere (raccogliere) i codici di uscita in bash
Pseudo codice:
ALLOWEDERROR=5
run_something
RESULT=$?
..other things..
run_something_else
RESULT=$RESULT + $?
if [ $RESULT -gt ALLOWEDERROR ]
then echo "Too many errors"
fi
Problema: Anche se Internet afferma il contrario, bash si rifiuta di trattare il risultato e $? come numero intero. Qual è la sintassi corretta?
Grazie.
L'ultimo conta solo il numero di volte in cui è stato eseguito, indipendentemente dall'errore (o dal successo): RISULTATO = $ (($ RISULTATO + 1)). Se si desidera utilizzare il costrutto $ (()), è necessario aggiungere $? invece di 1 (come nella risposta di Dave Hinton). Altrimenti, aumenterai anche quando il comando restituirà 0. Oppure puoi usare una trappola come nella mia risposta. –
Grazie per quello, ho modificato la tua correzione. Mi piace la tua risposta. –
Questo non funzionerà se una riga ha un codice di ritorno di -1 e un altro ha un codice di ritorno di 1, poiché verranno sommati per apparire come successi (che è 0). –