2016-04-13 16 views
0

私は最終的にワークフローを呼び出す別のスクリプトrun_workflow.shを呼び出すwrapper.shスクリプトを持っています。 run_wrklow.shのエラーを処理したいと思います。つまり、ワークフローが正常に実行されたら、別のワークフローをトリガーする別のスクリプトrun_workflow2.shを呼び出す必要があります。ここで unixでのエラー処理サブシェルスクリプト用のスクリプト

は、サンプルコードです...私はこのコードをしようとすると、しかし、私は失敗したステータスを返すことができないんだけどどのように処理するためにエラー

wrapper.sh

sh run_workflow.sh #trigger workflow1 
if [ $? -ne 0 ]; then 
echo "Workflow Failed" 
else 
echo "Wrokflow Success" 
sh run_workflow2.sh #trigger workflow2 
    if [ $? -ne 0 ]; then 
    echo "Workflow2 Failed" 
    else 
    echo "Workflow2 Success" 
    fi 
fi 

私を提案してください。

+2

何かが失敗したときに 'run_workflow.sh'が非ゼロの戻りコードで終了しますか? –

答えて

1

ここに私の提案があります。 $?を明示的にテストする必要はありません。構文はifの後にコマンド([testコマンド)が続きます。私はstderr>&2)にエラーメッセージをエコー

exit_value=1 # default failure 

if sh run_workflow.sh #trigger workflow1 
then 
    echo "Wrokflow Success" 

    if sh run_workflow2.sh #trigger workflow2 
    then 
     echo "Workflow2 Success" 
     exit_value=0 
    else 
     echo "Workflow2 Failed" >&2 
    fi 
else 
    echo "Workflow Failed" >&2 
fi 

exit $exit_value 

注意。 exitコマンドはエラーを返します。エラーは0〜255の整数です。規約上、成功すれば0、エラーのときは1を返します。

また、経験豊かなプログラマーが私のコードをインデントしました。

+0

もっと重要なこと: 'run_workflow.sh'をいくつかの失敗の後に' exit 1'に変更してください。 –

+0

@WalterA: '$? 'がラッパーでテストされているので、すでにそうだったと仮定しました。多分それは楽観的だったかもしれない。 – cdarke