/ / Linux shell prova a catturare finalmente - linux, try-catch, infine

Linux shell prova a catturare finalmente - linux, try-catch, infine

Esiste un comando di bash di Linux come java try catch, infine? O la shell di Linux continua sempre?

try {
`executeCommandWhichCanFail`
mv output
} catch {
mv log
} finally {
rm tmp
}

risposte:

72 per risposta № 1

Bene, una specie di:

{ # your "try" block
executeCommandWhichCanFail &&
mv output
} || { # your "catch" block
mv log
}

rm tmp # finally: this will always happen

62 per risposta № 2

In base al tuo esempio, sembra che tu stia cercando di fare qualcosa di simile alla cancellazione di un file temporaneo, indipendentemente da come si esce da uno script. In Bash per fare questo prova il trap comando incorporato per intrappolare il EXIT segnale.

#!/bin/bash

trap "rm tmp" EXIT

if executeCommandWhichCanFail; then
mv output
else
mv log
exit 1 #Exit with failure
fi

exit 0 #Exit with success

Il rm tmp dichiarazione nel trap viene sempre eseguito quando lo script termina, quindi il file "tmp" tenterà sempre di essere cancellato.

Anche le trap installate possono essere ripristinate; una chiamata al trap con solo un nome di segnale resetterà il gestore del segnale.

trap EXIT

Per maggiori dettagli, vedere la pagina di manuale di bash: man bash


1 per risposta № 3

mv prende due parametri, quindi potresti voler veramente catare il contenuto del file di output:

echo `{ execCommand && cat output ; } || cat log`
rm -f tmp