次の機能がある場合:
TEST()
{
if [[ "$1" == "hi" ]]
then
exit 1
fi
echo "Some text"
}
現在のシェルでこの関数を実行すると:
TEST "hi"
すべてが期待どおりに動作します。関数のif文がtrueになり、スクリプト全体が終了します。一方、私がそうするなら:
FUNCTION_OUTPUT=$(TEST "hi")
このようにして、変数の関数からstdoutをキャプチャできます。関数内のifステートメントはまだtrueで、「exit 1」は引き続き実行されますが、サブシェルで実行されているため、スクリプトは引き続き実行されます。
VAR_NAME = $()を使用してサブシェルで何かを実行して変数に割り当てるのではなく、私の関数の "exit 1"行が実際にスクリプト全体を終了するように現在のシェルでこれを実行する方法はありますか?
ベストアンサー1
変数の割り当てはただ簡単なコマンドだから、あなたは使用することができますif条件関数が成功したか失敗したかを確認してください。
if ! FUNCTION_OUTPUT=$(TEST hi); then
echo Function return non-zero status
exit 1
fi
# This line never printed
printf '%s\n' "$FUNCTION_OUTPUT"
関数が成功すると、FUNCTION_OUTPUT
関数の結果を含む変数が得られます。
if ! FUNCTION_OUTPUT=$(TEST hii); then
echo Function return non-zero status
exit 1
fi
# Output content of FUNCTION_OUTPUT
printf '%s\n' "$FUNCTION_OUTPUT"