sh shell script on windows causes error: /dev/tty: No such device or address

sh shell script on windows causes error: /dev/tty: No such device or address

在 Windows 上 git commit-msg 我想 运行 以下脚本:

MSG=""
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 < /dev/tty 是否可以执行?否则我只会打印一条相应的消息。

提前致谢。

您可以使用 if [ -t 1 ]if [ -t 2 ] 来测试您是在管道中还是在终端中。

if [ -t 1 ]; then    # or if [ -t 2 ]
   # do interactive stuff
else
   # non-interactive variant
fi

参考:How to detect if my shell script is running through a pipe?

编辑:OP 报告说 [ -t 1 ] 在我原来的回答中没有用,但是 [ -t 2 ] 可以。第一个测试 stdout 进入 tty,第二个测试 stderr 进入 tty。在这种情况下,我猜测 Git Extensions 和 Visual Studio 都捕获了脚本的标准输出,但是 Git Extensions 将 stderr 发送到 tty 而 Visual Studio 也捕获了它。