我想警告用户,如果他们的提交消息没有遵循一定的指导原则,然后给他们选项来编辑他们的提交消息,忽略警告,或取消提交。问题是我似乎无法访问 stdin
。
下面是我的 commit-msg 文件:
function verify_info {
if [ -z "$(grep '$2:.*[a-zA-Z]' $1)" ]
then
echo >&2 $2 information should not be omitted
local_editor=`git config --get core.editor`
if [ -z "${local_editor}" ]
then
local_editor=${EDITOR}
fi
echo "Do you want to"
select CHOICE in "edit the commit message" "ignore this warning" "cancel the commit"; do
case ${CHOICE} in
i*) echo "Warning ignored"
;;
e*) ${local_editor} $1
verify_info "$1" $2
;;
*) echo "CHOICE = ${CHOICE}"
exit 1
;;
esac
done
fi
}
verify_info "$1" "Scope"
if [ $# -ne 0 ];
then
exit $#
fi
verify_info "$1" "Affects"
if [ $# -ne 0 ];
then
exit $#
fi
exit 0
下面是保留 Scope 信息空白时的输出:
Scope information should not be omitted
Do you want to:
1) edit the commit message 3) cancel the commit
2) ignore this warning
#?
消息是正确的,但它实际上并没有停止输入。我还尝试使用更简单的 read
命令,它也有同样的问题。看起来问题在于此时 git 已经控制了 stdin
并提供了自己的输入。我该怎么补救?
更新: 似乎这可能是一个复制的 这个问题,不幸似乎表明我的运气。