1. ホーム
  2. linux

[解決済み] 特定のコマンドを無視するBashのエラー

2022-03-16 09:40:13

質問

以下のオプションを使用しています。

set -o pipefail
set -e

bashスクリプトで、エラー時に実行を停止する。100行程度のスクリプトを実行しているが、スクリプト内のすべての行のリターンコードをチェックするのは面倒だ。

しかし、ある特定のコマンドについては、エラーを無視したいのです。どうすればいいのでしょうか?

解決方法を教えてください。

解決策

particular_script || true

$ cat /tmp/1.sh
particular_script()
{
    false
}

set -e

echo one
particular_script || true
echo two
particular_script
echo three

$ bash /tmp/1.sh
one
two

three は絶対に印刷されません。

また pipefail がオンになっています。 パイプ全体がゼロ以外の終了コードを持っているとシェルが考えるには十分です。 パイプ内のコマンドの1つが0以外の終了コードを持っている場合( pipefail オフの場合は最後の1つでなければなりません)。

$ set -o pipefail
$ false | true ; echo $?
1
$ set +o pipefail
$ false | true ; echo $?
0