Git 钩子。如何从用户输入中读取变量?

Yos*_*tik 6 git bash githooks git-bash

我正在尝试创建一个预提交挂钩。我希望它能够与用户交互。所以,我发现我可以使用
read -p "Enter info: " info
或者 只是
read info


我创建了一个文件:
预提交:

#!/bin/sh
read -r input
echo $input
Run Code Online (Sandbox Code Playgroud)

它只应该读取变量并输出它。但这不起作用。我的意思是它不能作为钩子使用。如果我使用终端运行它./.githooks/pre-commit,一切都好。但是当我使用 时git commit -am "Hook",它会回显空字符串并且不读取任何内容。难道我做错了什么?

Git版本是2.28.0.windows.1

Von*_*onC 8

正如在这个要点中一样,您可能需要考虑 stderr (由 Git 命令使用,例如这里

#!/bin/sh
# Redirect output to stderr.
exec 1>&2
# enable user input
exec < /dev/tty
Run Code Online (Sandbox Code Playgroud)

这些行之后的脚本示例:

consoleregexp='console.log'
# CHECK
if test $(git diff --cached | grep $consoleregexp | wc -l) != 0
then 
  exec git diff --cached | grep -ne $consoleregexp
  read -p "There are some occurrences of console.log at your modification. Are you sure want to continue? (y/n)" yn
  echo $yn | grep ^[Yy]$
  if [ $? -eq 0 ] 
  then
    exit 0; #THE USER WANTS TO CONTINUE
  else
    exit 1; # THE USER DONT WANT TO CONTINUE SO ROLLBACK
  fi
fi
Run Code Online (Sandbox Code Playgroud)