编辑:更新到 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/