如何在`commit-msg` git钩子中打开终端编辑器

4

我有一个commit-msg钩子,用于验证提交信息的内容。

如果检查失败,我想重新打开终端编辑器中的提交信息文件,以便我可以更正错误。

我有以下代码,当验证失败时提示用户:

#!/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

除非回复是YyNn,否则应重新打开编辑器。

但是实际上,我遇到了以下错误:

Received SIGHUP or SIGTERM

当我手动调用钩子时,脚本可以正确运行,因此我认为这与调用钩子的上下文有关。
我该如何在类似于commit-msg钩子中打开编辑器?
1个回答

1
我来翻译这段内容。这句话的意思是“我解决了它。明确地将TTY重定向到$EDITOR似乎起作用了。”下面一段需要翻译的内容没有上下文,无法进行准确翻译,请提供更多信息。
$EDITOR $COMMIT_MSG_FILE

使用:

$EDITOR $COMMIT_MSG_FILE < "$TTY"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接