Я хочу предупредить пользователя о том, что сообщение об их фиксации не соответствует определенному набору руководств, а затем дает им возможность редактировать сообщение об их фиксации, игнорировать предупреждение или отменять фиксацию. Проблема в том, что у меня нет доступа к 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 information should not be omitted
Do you want to:
1) edit the commit message 3) cancel the commit
2) ignore this warning
#?
Сообщение верное, но оно фактически не останавливается для ввода. Я также попытался использовать более простую команду "читать", и у нее такая же проблема. Похоже, что проблема в том, что на данный момент git имеет контроль над stdin и предоставляет свой собственный вход. Как это исправить?
Обновление: похоже, это может быть дубликат этого вопроса, который, к сожалению, кажется, что мне не повезло.