在Windows上的git commit-msg中,我要运行以下脚本:
MSG="$1"
if ! grep -s -qE "#[0-9]" "$MSG";then
exec < /dev/tty
cat "$MSG"
echo "Your commit message does not contain a reference to a work item. Continue? [y/n]"
read -s -n 1 sure
if [[ $sure == "y" ]]; then
exit 0
else
echo "Aborting commit..."
exit 1
fi
fi
当我使用Git扩展程序时,它运行良好。
但是当我想直接从Visual Studio提交(团队资源管理器或Git更改)时,出现以下消息错误:
Your git-hook, '.git/hooks/commit-msg' (line 23) is not supported, likely because it expects interactive console support./r/nSee your administrator for additional assistance.
我的问题: 是否可以检查 exec 是否可以执行?否则,我只会打印一条相应的消息。
谢谢。
答案 0 :(得分:2)
您可以使用@import 'theme'
或if [ -t 1 ]
来测试您是在管道中还是在终端中。
if [ -t 2 ]
参考:How to detect if my shell script is running through a pipe?
编辑:OP报告我的原始答案中的if [ -t 1 ]; then # or if [ -t 2 ]
# do interactive stuff
else
# non-interactive variant
fi
不起作用,但[ -t 1 ]
却起作用。第一个测试将stdout用于tty,而第二个测试将stderr用于tty。在这种情况下,我猜想Git Extensions和Visual Studio都可以捕获脚本的stdout,但是Git Extensions将stderr发送到tty,而Visual Studio也可以捕获它。