Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果条件在SVN预提交钩子中不起作用,则执行Shell脚本_Shell_Svn_Grep_Svnlook - Fatal编程技术网

如果条件在SVN预提交钩子中不起作用,则执行Shell脚本

如果条件在SVN预提交钩子中不起作用,则执行Shell脚本,shell,svn,grep,svnlook,Shell,Svn,Grep,Svnlook,需要帮忙吗 我试图增强pre-commit钩子,看看如果存在某个键,是否可以忽略对提交消息的解析!在提交消息中忽略 在此之前的if条件,喜欢检查是否有空的提交消息工作。但如果这种情况不知何故不起作用 当我使用消息SmartCommitteTest(不包含我的检查键)执行提交时,确定!忽略,提交成功,这意味着下面的If条件从未执行或未按预期执行。所以试着去理解它到底出了什么问题 SMARTCOMMIT=1 $SVNLOOK log -t "$TXN" "$REPOS" | grep "!igno

需要帮忙吗

我试图增强pre-commit钩子,看看如果存在某个键,是否可以忽略对提交消息的解析!在提交消息中忽略

在此之前的if条件,喜欢检查是否有空的提交消息工作。但如果这种情况不知何故不起作用

当我使用消息SmartCommitteTest(不包含我的检查键)执行提交时,确定!忽略,提交成功,这意味着下面的If条件从未执行或未按预期执行。所以试着去理解它到底出了什么问题

SMARTCOMMIT=1 
$SVNLOOK log -t "$TXN" "$REPOS" | grep "!ignore" | wc -c || SMARTCOMMIT=0
if [ $SMARTCOMMIT = 0];      
then
echo "Please use !ignore if you dont want to use smart commits in your commit message." 1>&2
exit 1
fi
非常感谢Etan提供的一些提示

我像注释中的另一个if条件一样更改了条件,然后它工作了

SMARTCOMMIT=$$SVNLOOK log-t$TXN$REPOS | grep!忽略| wc-c 如果[$SMARTCOMMIT=0];然后 回声请使用!如果不想在提交消息中使用智能提交,请忽略。1>&2 出口1 fiif语句可以查看命令的出口输出,因此不需要根据输出设置环境变量:

shopt extglob > /dev/null  && extglob=1
if ! $SVNLOOK log -t "$TXN" "$REPOS" | grep -q '!ignore'
then
    echo 'Please use "!ignore" if you dont want to use smart commits in your commit message.' 1>&2
    exit 1
fi
这运行$SVNLOOK log-t$TXN$REPOS | grep-q'!忽略'

q是安静模式。grep要么在字符串存在时退出零,要么在字符串不存在时退出非零。通过将其放入if!,then子句仅在以下情况下执行!发现了忽略


你必须确保这一点!ignore被单引号包围,或者您在!前面加了\!。Bash中有一个csh类型的历史机制,无法关闭它。只要贝壳看到!,它假定它与进程ID号有关。

[$SMARTCOMMIT=0];您错过了0和结尾之间所需的空间]。也可以使用单引号!忽略以确保禁用历史分析,无论如何,脚本中都应该禁用历史分析,但单引号更安全。这个命令的| |部分什么时候发生过?wc什么时候会返回非零?@EtanReisner当我在0和]之后给出空格时,它仍然不起作用。我假设wc-c在提交消息包含字符串时返回非零!忽略已使用,以便找到它并返回一个非零值,Smartcommit=0不会被设置。定义在该上下文中不起作用?你也没有在原始上下文中解释它。我假设我对wc的第二个评论可能是相关的。很抱歉,我没有听你的最后一个评论…你检查过wc在找到或没有找到任何输出时返回非零吗?不是吐出一个非零的值,而是返回一个非零的退出代码?因为它几乎肯定不会。另一方面,grep在没有打印行时退出非零。这可能对你更有用。你还没有解释到底是什么不起作用。