如何在Git钩子中使用"select"?

van*_*ane 4 git shell githooks

我想用Git pre-commit钩子.我修改了默认pre-commit文件,我的钩子运行良好.

现在我想在预提交中添加一些选项,如下代码:

select run in "yes" "no"
do 
case $run in 
 "yes")UnitTest;;
 "no")echo "Ignore Unit Test!";;
 *)echo "other";;
esac
done
Run Code Online (Sandbox Code Playgroud)

但是当我运行时git commit,输出消息是

Run the Unit Test Case?
1) yes
2) no
#? 
Run Code Online (Sandbox Code Playgroud)

该脚本不会给我任何输入选项的机会; 它看起来像挂钩立即退出.我试图pre-commit从另一个脚本调用,它按预期工作.

我如何select在Git钩子中使用?

tor*_*rek 6

预提交挂钩在stdin重定向的情况下运行(在这种情况下为/ dev/null),因此您的"select"语句尝试读取并立即获得EOF.您可以通过重定向输入来解决此问题:

exec < /dev/tty
Run Code Online (Sandbox Code Playgroud)

之前select,或< /dev/ttydone部分之后添加.