質問: bashスクリプトで、特定の条件が発生した場合にスクリプト全体を終了する方法 私はいくつかのコードをテストするためにbashでスクリプトを書いています。しかし、最初にコードのコンパイルが失敗した場合、テストを実行するのは馬鹿げているように見えます。その場合は、テストを中止します。スクリプト全体をwhileループの内側にラップし、ブレークを使用せずにこれを実行できる方法はありますか? dun dun dun gotoのようなものですか?
回答: 私はしばしばエラーを処理するためにrun()と呼ばれる関数を含みます。私がしたいすべての呼び出しはこの関数に渡されるので、失敗したときにスクリプト全体が終了します。 set -eソリューションよりも優れているこの利点は、行が失敗したときにスクリプトがサイレントモードで終了しないことです。そして、問題が何であるかを知ることができます。次の例では、falseの呼び出しでスクリプトが終了するため、3行目は実行されません。function run() { cmd_output=$(eval $1) return_value=$? if [ $return_value != 0 ]; then echo "command $1 failed" exit -1 else echo "output: $cmd_output" echo "command succeeded." fi return $return_value } run "date" run "false" run "date"