我创建了comment-added
Gerrit (v. 2.8) 钩子:
PROJECT="UNKNOWN"
AUTHOR="UNKNOWN"
while [[ $# > 1 ]]
do
key="$1"
shift
case $key in
--project)
PROJECT="$1"
shift
;;
--author)
AUTHOR="$1"
shift
;;
*)
# unknown option
;;
esac
done
# do something with the $PROJECT variable
争论者从这个答案中阅读的想法。根据文档,这个钩子应该同时使用 project
和 author
参数调用。如果我使用以下命令模拟调用,一切正常:
./commend-added --branch test --project testproject --author testauthor --whatever sth
但是,当从 Gerrit 执行钩子时,PROJECT
和AUTHOR
变量都具有默认值UNKNOWN
值。为什么?
我已经检查过从 Gerrit 调用时$#
变量的值是否为 16
。我还验证了从 Gerrit 调用脚本时永远不会执行while
循环。
我还尝试了另一个带有变量$#
循环,但它都没有执行:
for ((i=1; i<=$#; i++)); do
# do something
done
但是,我可以迭代$@
变量。通过使用它,我还验证了 Gerrit 提供给脚本的参数与文档中的参数相同。
我做错了什么?当 Gerrit 执行钩子时如何阅读参数?
我怀疑 gerrit 在没有解析命令行的情况下执行钩子。
如果发生这种情况,您只需在脚本的开头添加:
set $*
这将再次解析命令行。