Windows上的sh shell脚本导致错误:/ dev / tty:没有这样的设备或地址

时间:2019-02-05 09:46:56

标签: git sh githooks

在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 是否可以执行?否则,我只会打印一条相应的消息。

谢谢。

1 个答案:

答案 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也可以捕获它。