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 № 1Bene, 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