windows - 管道在 git for windows 中的 bash 中返回空字符串

标签 windows git bash shell pipe

编辑:更新到 Git for Windows >= 2.9.0.windows1 后问题已解决


免责声明

一些评论提到了这个问题背后的完整“故事”,但我决定缩短它,因为它太长而且难以理解。我向您展示尽可能简洁的失败示例。对于那些有兴趣了解问题的完整上下文的人:它在 previous revision of the question 中可用。 .


这个:basedir=$(dirname "$(echo "$0"| sed -e 's,\\,/,g')") 是第一行(不包括 hashbang)安装 CLI 附带的任何软件包后由 npm 生成 的脚本。 由于某些原因,basedir 被错误解析,这就是节点找不到模块和崩溃的原因。我设法将问题缩小到适用于 Windows 的 git-bash 的最新 Git 子 shell 中的管道。执行:

echo -n "1:"
echo "a" | cat
echo -n "2:"
echo "$(echo "a" | cat)"
echo -n "3:"
echo "$(echo "a")"

打印:

1:a
2:
3:a

我找不到遇到此问题的其他人,所以我认为我的环境(Windows 10 专业版、Windows 2.8.4 的 Git)有问题,我个人不知道它可能来自哪里。 我的发现:

  • 将 Git for Windows 降级到 2.6.4 可以解决这个问题。我仍然不喜欢被困在旧版本上;/
  • 它在干净的 Windows 10 VM 上运行良好
  • 管道输出似乎完全是空的,因为运行以下代码段不会返回任何结果。
  • 在全新安装 mingw + msys 时不会出现问题

片段:

echo $(echo foobar | cat > bazzzzzzzzzz ; ) ; cat bazzzzzzzzzz
find /c -name bazzzzzzz* 2> /dev/null # /c, /d and /x are my Windows partitions
find /d -name bazzzzzzz* 2> /dev/null # I did test if it actually works for existing file and it does
find /x -name bazzzzzzz* 2> /dev/null

感谢 agc 为解决这一问题提供的宝贵帮助。


我的 PATH 变量如下所示:

PATH=/c/Users/ja/bin:/mingw64/bin:/usr/local/bin:/usr/bin:/bin:/mingw64/bin:/usr/bin:/c/Users/ja/bin:/c/Windows:/c/Windows/System32:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0:/c/Program Files/nodejs:/c/ProgramData/Oracle/Java/javapath:/c/program files/graphicsmagick-1.3.23-q16:/c/ProgramData/chocolatey/lib/getopt/binaries:/c/Program Files (x86)/Windows Kits/8.1/Windows Performance Toolkit:/c/Program Files/nodejs:/c/Program Files (x86)/Microsoft VS Code/bin:/c/Users/ja/AppData/Roaming/npm:/c/Program Files (x86)/MacType:/usr/bin/vendor_perl:/usr/bin/core_perl

还有

$ which sed
/usr/bin/sed
$ which echo
/usr/bin/echo
$ which cat
/usr/bin/cat
$ echo $SHELL
/usr/bin/bash

最佳答案

总结评论,简短的 (tl;dr) 版本:降级、升级和/或重新安装 Git for Windows 附带的 MSYS 和 MinGW。

MSYS补品 MinGW , 以及 Git for Windows 提供的版本可以从 MSYS 的原始维护者那里修改。有 a bug reported against MSYS对于看似相同的问题(使用“mingw 版本:64 位与 git 版本 2.8.3.windows.1 捆绑在一起”),但被标记为“对我有效”(即“无法重现”)。但有评论说问题可能出在重新包装上:

"Please be advised that MSYS, as bundled with git for windows, may be modified from our official distribution, (and 64-bit MinGW certainly isn't ours); thus we don't formally support either of these." https://sourceforge.net/p/mingw/bugs/2303/

长话短说,看起来像个错误。

关于windows - 管道在 git for windows 中的 bash 中返回空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37643385/

相关文章:

python - 从 python 重启本地计算机

Python Ctypes - 加载 dll 抛出 OSError : [WinError 193] %1 is not a valid Win32 application

c - Allegro 5.2 编译错误

linux - 找到并比较最近的 02 文件

linux - 不匹配任何东西的 Glob 会扩展到自身,而不是什么都没有

c# - 在 webview (UWP) 中启用触摸事件

windows - 无法启动 Git Bash

git - 什么会导致 "number of commits ahead"在 rebase 后发生变化?

git - Git Flow 中功能分支上提交的命名约定

Bash 传递不在循环第 i 个元素中的文件名