我有一个简单的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引用,单引号,单引号和双引号的各种组合等。
感谢您提供任何线索!
答案 0 :(得分:1)
尝试
function checkcommand()
{
eval $1
if [ "$?" -ne "0" ]; then
echo "$2"
exit 1
fi
}
在您的命令中\
之前使用"
,就像在示例中一样。
答案 1 :(得分: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!"