bash:前のコマンドが失敗したかどうかを検出し、関数内で終了する方法は?

bash:前のコマンドが失敗したかどうかを検出し、関数内で終了する方法は?

コマンドを引数として受け取り、コマンドを実行するbashスクリプトに関数を作成しようとしています。コマンドがゼロ以外の値で終了すると、スクリプトは中断されます。

文書:command_wrapper.sh

#!/usr/bin/env bash

function exec_cmd() {
    local command=${1}
    $command || exit            # run the command if $? is 1 exit
    if [[ $? -eq 1 ]]           # AGAIN if $? is 1 exit
    then
        echo "command failed"
        exit
    fi

    return 0
}

exec_cmd "grep -R somsomeoemoem ."      # call the function, passing a 
                                        # command that will exit with 1

echo "rest of script running"

呼ぶ:

% ./command_wrapper.sh
./command_wrapper.sh:exec_cmd "grep -R somethingyouwillneverfind ."
rest of script running

ゼロ以外の終了で関数を実行した後、スクリプトは引き続き実行されます。なぜですか?失敗時にエラーが発生したときに
このコマンドを終了させるにはどうすればよいですか?$command

ベストアンサー1

あなたの機能は設計どおりに機能しますが、問題はあなたの家が正しくないことです。grep -R somsomeoemoem .エラーが発生したため終了しません。

関数が終了することを確認するには、次のコマンドを試してください。

exec_cmd "false"

おすすめ記事