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



我有一个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钩子内打开?

解决了。显式地将TTY重定向到$EDITOR似乎有效。

替换:

$EDITOR $COMMIT_MSG_FILE

:

$EDITOR $COMMIT_MSG_FILE < "$TTY"

相关内容

  • 没有找到相关文章