web-dev-qa-db-ja.com

最後にシェルでtry catchを書く

Java try catch finally ??またはlinux Shellは常に実行されますか?

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

まあ、並べ替え:

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

 rm tmp # finally: this will always happen
87
Faiz

例に基づいて、スクリプトの終了方法に関係なく、常に一時ファイルを削除するようなことをしようとしているようです。 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

traprm tmpステートメントは、スクリプトの終了時に常に実行されるため、ファイル「tmp」は常に削除されます。

インストールされているトラップもリセットできます。シグナル名のみでトラップを呼び出すと、シグナルハンドラがリセットされます。

trap EXIT

詳細については、bashのマニュアルページを参照してください。man bash

81
theycallhimart

mvは2つのパラメーターを取るため、出力ファイルのコンテンツを実際にcatしたい場合があります。

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