Tengo un gancho commit-msg
que valida el contenido del post de confirmación.
Si esa verificación falla, quiero volver a abrir el file de post de confirmación de mi editor de terminal para poder corregir el error.
Tengo lo siguiente, que avisa al usuario cuando falla la validation.
#!/usr/bin/env bash COMMIT_MSG_FILE="$1" # If we have a STDIN, use it, otherwise get one if tty >/dev/null 2>&1; then TTY=$(tty) else TTY=/dev/tty fi while true; do # read lines from file COMMIT_MSG_LINES=() while IFS= read -r; do COMMIT_MSG_LINES+=("$REPLY") done < <(cat $COMMIT_MSG_FILE) # validate - limit the subject to 50 characters test "${#COMMIT_MSG_LINES[0]}" -le 50 && break; echo -n "Validation failed. Proceed with commit [y/n]? " read REPLY < "$TTY" case "$REPLY" in Y*|y*) exit 0 ;; N*|n*) exit 1 ;; *) $EDITOR $COMMIT_MSG_FILE; continue ;; esac done
Cualquier respuesta que no sea YyNn
debe volver a abrir el editor.
Sin embargo, en su lugar, recibo el siguiente error:
Received SIGHUP or SIGTERM
Cuando llamo manualmente al enganche, el script funciona correctamente, así que supongo que esto tiene que ver con el context en el que se invocan los enganches.
¿Cómo puedo hacer que el editor se abra desde dentro de un commit-msg
como este?
Resuelto. Redirigir explícitamente el TTY a $EDITOR
parece funcionar.
Reemplazado:
$EDITOR $COMMIT_MSG_FILE
con:
$EDITOR $COMMIT_MSG_FILE < "$TTY"