我正在尝试实现一个选项来跳过预提交挂钩中的预提交挂钩(这将被视为通过并执行提交)。
一切运行正常,除了提示读取一个空字符串(“”),因此开关将转到默认的“无效参数”,从而导致无限循环。
我猜我对预提交的工作方式有些不理解,这导致了这种行为。您能否解释一下,如果可能的话,能否提示一下解决方案?
while true; do
read -p "Do you want to run pre-commit hook? (N=pass) [Y/N]: " choice
#tried alternative approach, but no success.
#echo "Do you want to run pre-commit hook? (N=pass) [Y/N]: "
#read choice
echo "Debug: response=\"$choice\""
case $choice in
[Yy]* )
echo "Running pre-commit hook...";
break;;
[Nn]* )
echo "Skipping pre-commit hook. This is evaluated as passed.";
exit 0;;
* )
echo "Invalid input. Please enter 'y' or 'n'.";;
esac
done
答案1
看起来这是预期的行为,因为 Git 不在交互式环境中运行钩子。
一些快速谷歌搜索发现这个问题,这看起来几乎相同。为了便于参考,那里接受的答案指出您可以通过exec < /dev/tty
作为挂钩的一部分运行来打开标准输入。这应该在现有命令之前完成read
,允许它按照您的预期从标准输入中读取。