4

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

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

select run in "yes" "no"
do 
case $run in 
 "yes")UnitTest;;
 "no")echo "Ignore Unit Test!";;
 *)echo "other";;
esac
done

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

Run the Unit Test Case?
1) yes
2) no
#? 

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

如何select在 Git 挂钩中使用?

4

1 回答 1

6

pre-commit 钩子在 stdin 重定向的情况下运行(在本例中为 /dev/null),因此您的“select”语句尝试读取并立即获得 EOF。您可以通过重定向输入来解决此问题:

exec < /dev/tty

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

于 2013-07-12T07:07:24.343 回答