我一直在尝试编写一个简单的bash脚本作为pre-push钩子,我在推送Java代码时会检查缺少的测试文件.
问题是:read命令没有等待用户输入,它就像没有输入输入一样继续.
has_java="git diff --stat --cached origin/master | grep \"src\/main.*\.java\""
has_test="git diff --stat --cached origin/master | grep \"src\/test.*\.java\""
exit_val=0
if eval $has_java; then
if eval $has_test; then
:
else
echo "*** NO TESTS WERE FOUND WHILE PUSHING JAVA CODE ***"
read -n1 -p "Do you want to CONTINUE pushing? [Y/n]" doit
case $doit in
n|N) exit_val=1 ;;
y|Y) exit_val=0 ;;
*) exit_val=0 ;;
esac
fi
fi
Run Code Online (Sandbox Code Playgroud)
Git钩子不使用标准输入.因此,必须附加来自终端的输入:dev/tty.
只需在命令末尾附加终端即可使用:
read -n1 -p "Do you want to CONTINUE pushing? [Y/n]" doit < /dev/tty