1

コマンドが正常に実行されたかどうかを確認し、そうでない場合はエラーをスローする関数を作成しました。

assert_success () {
    "$1"
    if [[ $? == 0 ]]; then
        echo "$2"
    fi
}

指定されたエラーで実行する次のコマンドがあるとします。

assert_success <command> <error_message>

したがって、基本的には、次のようなものです。

assert_success $(mkdir blah) "This worked"

しかし、私は得るa.sh: line 3: This worked: command not found

echoここで を正しく動作させるにはどうすればよいですか?

4

2 に答える 2

1

私のコメントのリンクで説明されている問題を除けば、そのような機能は必要ありません。&&単純にコマンドを実行してから、演算子を使用して成功メッセージを出力する方が短くなります。比較

mkdir blah && echo "This worked"

どちらかと

assert_success "mkdir blah" "This worked"

またはanubhavaのソリューション

assert_success "This worked" mkdir blah
于 2015-12-03T12:37:07.490 に答える
1

問題はこの呼び出しにあります:

assert_success $(mkdir blah) "This worked"`

コマンド自体ではなく、commandの出力を渡しています。mkdirmkdirの出力mkdirは空で引用符 "This worked"で囲まれていないため、関数内になり$1、エラーが発生します。This worked: command not found

次のような関数を使用することをお勧めします。

assert_success () {
   msg="$1"
   shift
   if $@; then
      echo "$msg"
   fi
}

この関数を次のように呼び出します。

assert_success "This worked" mkdir blah
于 2015-12-03T05:56:07.337 に答える