如何从 `commit-msg` git 钩子中打开终端编辑器
How to open terminal editor from within `commit-msg` git hook
我有一个 commit-msg
钩子来验证提交消息的内容。
如果检查失败,我想在我的终端编辑器中重新打开提交消息文件,以便我可以更正错误。
我有下面的,验证失败时提示用户。
#!/usr/bin/env bash
COMMIT_MSG_FILE=""
# 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"
我有一个 commit-msg
钩子来验证提交消息的内容。
如果检查失败,我想在我的终端编辑器中重新打开提交消息文件,以便我可以更正错误。
我有下面的,验证失败时提示用户。
#!/usr/bin/env bash
COMMIT_MSG_FILE=""
# 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"