管道在git中为bash返回空字符串

Bar*_*ski 10 windows git bash shell pipe

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


放弃

一些评论指的是这个问题背后的完整"故事",但我决定缩短它,因为它太长而且难以遵循.我尽可能地向你展示简洁的失败例子.对于那些有兴趣了解问题的完整背景的人:可以在问题的先前修订版中找到它.


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

echo -n "1:"
echo "a" | cat
echo -n "2:"
echo "$(echo "a" | cat)"
echo -n "3:"
echo "$(echo "a")"
Run Code Online (Sandbox Code Playgroud)

打印:

1:a
2:
3:a
Run Code Online (Sandbox Code Playgroud)

我找不到其他人这个问题所以我认为我的环境(Windows 10 Pro,Git for Windows 2.8.4)出了问题,而且我个人认为它可能来自于它的想法.我的发现:

  • 将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
Run Code Online (Sandbox Code Playgroud)

感谢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
Run Code Online (Sandbox Code Playgroud)

也

$ which sed
/usr/bin/sed
$ which echo
/usr/bin/echo
$ which cat
/usr/bin/cat
$ echo $SHELL
/usr/bin/bash
Run Code Online (Sandbox Code Playgroud)

mic*_*ael 2

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

MSYS补充了MinGW , Git for Windows提供的版本可能会被 MSYS 的原始维护者修改。针对 MSYS 报告了一个错误,似乎是同一问题(使用“mingw 版本:与 git 版本 2.8.3.windows.1 捆绑的 64 位”),但被标记为“对我有用”(即“无法重现”)。但有评论认为问题可能出在重新包装上:

“请注意,MSYS 与 Windows 的 git 捆绑在一起,可能会从我们的官方发行版中进行修改(64 位 MinGW 当然不是我们的);因此我们不正式支持其中任何一个。” https://sourceforge.net/p/mingw/bugs/2303/

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