
特定のステップでエラーが発生した後もシェルスクリプトを実行し続けたいが、エラーの後に終了します。
if [ condition ];then
cmd
else
cmd1
return 4
fi
cmd2
上記の手順が実行されていませんでしたが、コード4を返し、cmd2を実行したかったのですが、それは起こりませんでした。コード全体が関数内にあります。
答え1
関数を返す指定した次の番号(または実行された前のコマンドの戻りコード)を使用して関数を終了するので、次のコマンド(cmd2)を実行せずに終了するのは通常の動作です。 cmd2コマンドを実行したいが関数の最後に4を返したい場合(cmdではなくcmd1を使用するため)、次のフラグを使用します。
flag=0
if [ condition ];then
cmd
else
cmd1
flag=1
fi
cmd2
if [[ $flag -eq 1 ]]; then
return 4
fi
return 0
しかし、これは少しトリッキーに見えるので、他の方法を考慮する必要があります(2つの異なる機能?)。
答え2
Bashにはステートメントがありますが、return
取得できる唯一のものは関数の終了状態(0から255の値)です。だからreturn
あなたが望むものではありません。
return
ステートメントをに置き換えると、値echo
をキャプチャして続行できます。
代わりに、次のようにすることができます。
#!/bin/bash
function master ()
{
function check ()
{
if [ 1 == 2 ];then
echo "Cmd1"
else
# Execute your command here
echo 4
fi
}
val=$(check)
echo "Value: $val"
echo "Done"
}
master
注:コード全体をmaster
関数に入れました(現在のスクリプトと一貫性を維持するため)。