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

将单词列表保留为单词列表;不要将它们引用成一个词,只是为了稍后扩展它: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
}

就像在示例中一样,在命令中使用\before 。"

于 2012-08-24T01:22:40.970 回答