Script de Shell / Git: coincidencia de patrones para el post de confirmación actual

Estoy intentando hacer un gancho para un post que estás por cometer en git. Lo que suelo hacer cuando estoy por comprometerme es [SOME_DESCRIPTION] Refs # [0-9] +

Nunca antes he hecho scripts de shell, pero soy bastante hábil en la progtwigción en general. Intento escribir un script en commit-msg que validará si el actual que intentas save tiene el patrón "* Refs # [0-9] +". Pero no tengo experiencia en syntax de shell y no tengo mucho linux.

  • Creo que $ 1 es para get el post de confirmación actual, pero probablemente estoy equivocado.
  • Y mi forma de verificar el patrón probablemente sea incorrecta
requireTicketRef=$1 if [[ $requireTicketRef == *Refs \#[0-9]+ ]] then echo "Contains ticket reference" exit 0 else echo "Need to add ticket reference" exit 1 fi 

Suponiendo que tiene razón, con un $1 el post de confirmación, su código está cerca, pero los patrones que utiliza bash con == en [[]] no son expresiones regulares. En su lugar, son el mismo tipo de comodines que se utilizan para expandir nombres de file, generalmente llamados "globs", que normalmente no tienen la capacidad de cuantificar coincidencias específicas (como "1 o más dígitos").

(También tienen que ser una sola palabra, por lo que necesita otra barra invertida frente al espacio entre Refs y el # . Y realmente no necesita una frente al # cuando no es lo primero en una palabra).

Tienes un par de opciones para arreglar esto. La más simple es probablemente usar expresiones regulares reales, que puede hacer dentro de [[]] simplemente usando =~ lugar de == :

 if [[ ! $requireTicketRef =~ Refs\ #[0-9]+ ]]; then echo >&2 "Need to add ticket reference." exit 1 fi 

La otra opción sería activar la extglob ("glob extendido"), que toma prestada alguna syntax del shell Korn para llevar las capacidades tipo regex (negación, alternancia, cuantificación) a patrones glob.

 shopt -s extglob if [[ ! $requireTicketRef == *Refs\ #+([0-9])* ]]; then echo >&2 "Need to add ticket reference." exit 1 fi