2017-08-08 15 views
1

これは、bashスクリプトファイル(-eと-o)の先頭にこれを置いています。 しかし、一部の機能では、終了しないようにしたいと思います。例Bash - setを無効にする方法-eとset -o

set -e 
set -o pipefail 

function check_status { 
    echo "Start Check" 
    docker exec mservice bash -c "echo 'Hello' | grep 'fail'" 
    echo "End check" 
} 

check_status 

は、どのように私は、スクリプトの外に出て行くから、これを防ぐことができます - 私はこれを実行した場合、基本的には、次のコマンドが「1」を返すので、「チェック開始」が、その後終了しプリントアウトでしょう。

set -e/-oを複数の場所または異なる機能で無効にして有効にしたいと考えています。

答えて

3

それぞれset -Xオプションの場合、逆はset +Xです。

set +eは、set -eを元に戻し、set +o pipefailは、set -o pipefailを元に戻します。

+0

私は:私のドッキングウィンドウのインストールがmserviceという名前のものが含まれていないので、

それとも、testfail.shとしてあなたの関数

#!/usr/bin/env bash set -e set -o pipefail function check_status { if docker exec mservice bash -c "echo 'Hello' | grep 'fail'"; then echo good else echo bad fi } status=$(check_status) if [ "$status" = 'bad' ]; then echo "check_status failed, but still running, handling the error..." fi 

保存でエラーを処理し、私のためにそれを実行することができますが、故障の原因となります申し訳ありませんが、あなたは天才です! – ibaralf

0

また、単独の設定のまま、とのような単純なもの行うことができます。

docker exec mservice bash -c "echo 'Hello' | grep 'fail'" || true 

を...ので、そのコマンドリストの成功した実行力をやっインチこの場合、ドッカーコマンドの失敗を検出するプログラム的な方法はありませんが、コマンドが何らかのエラーメッセージを出すと、人間の観察者は気付くかもしれません。

$ ./testfail.sh 
Error response from daemon: No such container: mservice 
check_status failed, but still running, handling the error... 
$ 
+0

ありがとう、素晴らしい解決策。 – ibaralf

関連する問題