終了コードに対する副作用なしでオプションのタスクを実行する慣用的なbashメソッド

終了コードに対する副作用なしでオプションのタスクを実行する慣用的なbashメソッド

スクリプトはテスト結果で終了しますが、これは呼び出し側の観点からは望ましくありません。どのように実装する必要がありますか?

#!/bin/bash
test -n "" && echo "test passed"

答え1

明示的な内容を追加してください。

exit 0

エラーが報告されたくない場合は、スクリプトの最後に追加してください。

次のようにすることもできます。

#! /bin/sh -
ret=0

cmd || ret=$? # we care about the failure of cmd

test -n "" && echo test # we don't care about the failure of test or echo

exit "$ret"

具体的な例として、次のように書き直すことができます。

test -z "" || echo test passed

(失敗してもエラーは報告され続けますが、echo問題が発生したことを示すため、報告することをお勧めします。)

または:

test -n "" && echo test passed || : ignore

この:コマンドは常に成功終了ステータス。

関連情報