Windows 11 LTSC下Git Bash的STDERR重定向失效求助
问题分析与解决方案
可能原因
Windows 11 LTSC版本在控制台子系统、管道处理机制上和普通Win11存在差异,导致Git Bash(MINGW64环境)中2>&1重定向时,git subtree pull的输出缓冲区无法正常刷新,进而引发脚本卡住。另外,Git 2.51.0.windows.1的MINGW64运行时在LTSC环境下可能存在STDERR/STDOUT管道关联的兼容性问题。
解决办法
1. 强制刷新输出缓冲区
在重定向后添加管道调用cat,强制输出流刷新,避免缓冲区阻塞:
check=( $(git subtree pull --prefix=$3 $2 $1 --squash 2>&1 | cat) )
2. 提前全局重定向STDERR到STDOUT
如果脚本中多个命令需要重定向,可以在脚本开头先执行:
exec 2>&1
之后所有命令的STDERR都会自动转到STDOUT,无需单独添加重定向。
3. 排查交互阻塞场景
检查是否存在Git需要交互输入的场景(比如凭证验证),重定向后交互被抑制导致卡住,可先禁用自动凭证弹窗:
git config --global core.askpass ""
若确实需要凭证,可改用环境变量传递或配置Git凭证管理器。
4. 更换Git版本
尝试降级到在普通Win11上正常运行的Git版本(比如2.50.x系列),或升级到最新稳定版,验证是否为特定Git版本与LTSC的兼容性问题。
5. 调整数组赋值方式
先将输出捕获为字符串,再转换为数组,避免直接在数组赋值时的管道阻塞:
check=$(git subtree pull --prefix=$3 $2 $1 --squash 2>&1) check=($check)
内容的提问来源于stack exchange,提问作者silvio.ledergerber
相关产品推荐
相关产品推荐

