2

文字列として渡されたコマンドを実行し、$?の戻りコードを確認し、ゼロ以外を返す場合は、2番目の引数で指定されたエラーを出力して終了するという単純なbash関数があります。

関数は次のとおりです。

function checkcommand()
{
    $1
    if [ "$?" -ne "0" ]; then
        echo "$2"
        exit 1
    fi
}

この機能はうまく機能します。動作する例を次に示します。

checkcommand "git clone /home/git/framework.git $gitreponame" "git clone failed!
"

関数を使用してコミットの成功を検証したい場合に問題が発生します。

checkcommand "git commit -m\"remove migrations from release-$todaysrelease-pr
ep\"" "Commit for migrations removal from release-$todaysrelease-prep failed!" 

私は(写真のように)baclslash引用符、一重引用符、一重引用符と二重引用符のさまざまな組み合わせなどを試しました。

手がかりをありがとう!

4

2 に答える 2

2

単語リストを単語リストのままにします。後で拡張するためだけにそれらを1つの単語に引用しないでください。evalは悪です。

典型的なdie関数は、はるかに単純で読みやすいイディオムです。

die() {
  echo "$*" >&2
  exit 1
}

git commit -m"remove migrations from release-$todaysrelease-prep" ||
  die "Commit for migrations removal from release-$todaysrelease-prep failed!"
于 2012-08-27T21:33:46.530 に答える
1

試す

function checkcommand()
{
    eval $1
    if [ "$?" -ne "0" ]; then
        echo "$2"
        exit 1
    fi
}

\例で行ったように、コマンドで前に使用"します。

于 2012-08-24T01:22:40.970 に答える