2016-09-29 1 views
0

У меня есть следующий сценарий bash.Как сделать сбой скрипта bash на основе регулярного выражения grep?

Проблема, которую я пытаюсь решить, очень проста. Когда коммит в Git no начинается с gh-1234 ..., он должен потерпеть неудачу.

Что не так с этим сценарием bash?

commit_regex='(gh-[0-9]+|merge)' 

error_msg="Aborting commit. Your commit message is missing either a Github Issue ('gh-1111') or 'Merge'." 

if ! grep -q "$commit_regex" <<< "$1"; then 
    echo "$error_msg" >&2 
    exit 1 
fi 
+2

Я думаю, что вы хотите 'grep -E'? – psmears

ответ

1

Как уже упоминалось в комментариях, что вам нужно сделать grep -E "$commit_regex"

От man grep PAGE-

-E, --extended- Интерпретировать PATTERN как расширенное регулярное выражение (ERE , Смотри ниже). (-E задается POSIX.)

Это должно решить вашу проблему, поскольку она вынуждает grep расширять переменную.

0

Также еще один способ добиться того же без Grep:

if [[ $git_message=~ $commit_regex ]] 
then 
    echo "$error_msg" 
    exit 1; 
fi 

также: Если совершить его «GH-1234» уполномочен быть в начале сообщения, вы должны добавить ^ в своем регулярном выражении ,

+0

O, но я не хочу проверять $ error_msg снова на регулярное выражение. Я хотел бы проверить git commit –

+0

Да, конечно, он будет работать против git commit также, если commit имеет символы в форме 'gh-1234'. Я просто взял error_msg в качестве примера, поскольку он также имел Запись "gh-1111". – Rambler

Смежные вопросы