Java try catch finally ??またはlinux Shellは常に実行されますか?
try {
`executeCommandWhichCanFail`
mv output
} catch {
mv log
} finally {
rm tmp
}
まあ、並べ替え:
{ # your 'try' block
executeCommandWhichCanFail &&
mv output
} || { # your 'catch' block
mv log
}
rm tmp # finally: this will always happen
例に基づいて、スクリプトの終了方法に関係なく、常に一時ファイルを削除するようなことをしようとしているようです。 Bashでこれを行うには、trap
組み込みコマンドを試してEXIT
信号をトラップします。
#!/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
trap
のrm tmp
ステートメントは、スクリプトの終了時に常に実行されるため、ファイル「tmp」は常に削除されます。
インストールされているトラップもリセットできます。シグナル名のみでトラップを呼び出すと、シグナルハンドラがリセットされます。
trap EXIT
詳細については、bashのマニュアルページを参照してください。man bash
mv
は2つのパラメーターを取るため、出力ファイルのコンテンツを実際にcatしたい場合があります。
echo `{ execCommand && cat output ; } || cat log`
rm -f tmp