一種のtry/catchフォームで、エラーが発生しても停止しないbashを実行したい。
特定のbashは次のとおりです。
#!/bin/sh
invoke-rc.d Tomcat stop
rm -fr /var/webapps/
cp -R $WEBAPP /var/webapps/
invoke-rc.d Tomcat start
「invoke-rc.d Tomcat stop」を実行したいのですが、Tomcatが実行されていなくても、他のbashコマンドを実行し続けます。
試してください:
invoke-rc.d Tomcat stop > /dev/null 2>&1 || true
少し背景:
user@tower: # true
user@tower: # echo $?
0
user@tower: # false
user@tower: # echo $?
1
user@tower: # which true
/bin/true
user@tower: # which false
/bin/false
realソリューションは、Tomcatが実行されているかどうかを確認するために、Tomcatの初期化スクリプトを調べています。
+ eの設定を解除/設定する他の提案については この投稿 を参照してください。それはあなたの当面の問題を解決しますが、特にファイルをコピーしているので、あなた自身のスクリプトで最近未設定の動作が必要であることに気付くかもしれません。
これは、さまざまなビルド環境でMakefileが期待どおりに動作することを除いて、trueとfalseが作成された最大の理由の1つです。
また、set + eは完全に移植可能ではありません。つまり、一部のバージョンのSolaris(さらにはDash)でもありますが、これがあなたにとって問題であるとは思えません。
set +e
で「すぐに終了」オプションを無効にし、コマンドを実行してから、オプションでset -e
で再度有効にします。
set +e
invoke-rc.d Tomcat stop
set -e # optional
組み込みのset
とそのさまざまなオプション(多数あります)のすべてについては、Bashマニュアルの セクション4.3.1 を参照してください。
bashのsetコマンド を使用して、exit-on-nonzero動作を一時的に無効にします。
set +e
invoke-rc.d Tomcat stop
set -e
もし invoke-rc.d Tomcat停止 失敗から保護したい唯一のものです invoke-rc.d Tomcat stop ||本当 できますか?それは決してゼロ以外の終了ステータスを持つべきではありません。