1. ホーム
  2. バッシュ

[解決済み】複数のコマンドのBash終了状態を効率的に確認する方法

2022-04-01 21:26:55

質問

pipefailのように、複数のコマンドをtry文のようにbash内で実行できるものはないでしょうか?このようなことをしたいのですが。

echo "trying stuff"
try {
    command1
    command2
    command3
}

そして、どの時点でも、何かコマンドが失敗したら、ドロップアウトして、そのコマンドのエラーをエコー出力します。というようなことはしたくない。

command1
if [ $? -ne 0 ]; then
    echo "command1 borked it"
fi

command2
if [ $? -ne 0 ]; then
    echo "command2 borked it"
fi

などなど...何でもいいんです。

pipefail -o
command1 "arg1" "arg2" | command2 "arg1" "arg2" | command3

なぜなら、私が考える各コマンドの引数は(間違っていたら訂正してください)互いに干渉し合うからです。この2つの方法は、私には恐ろしく長文で意地悪に思えるので、ここでもっと効率的な方法を訴えます。

解決方法は?

コマンドを起動してテストしてくれる関数を書けばいいのです。仮に command1command2 は、コマンドに設定されている環境変数です。

function mytest {
    "$@"
    local status=$?
    if (( status != 0 )); then
        echo "error with $1" >&2
    fi
    return $status
}

mytest "$command1"
mytest "$command2"