Я хочу предупредить пользователя о том, что сообщение об их фиксации не соответствует определенному набору руководств, а затем дает им возможность редактировать сообщение об их фиксации, игнорировать предупреждение или отменять фиксацию. Проблема в том, что у меня нет доступа к 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 и предоставляет свой собственный вход. Как это исправить?
Обновление: похоже, это может быть дубликат этого вопроса, который, к сожалению, кажется, что мне не повезло.