如何在Git Bash for Windows中将一个正斜杠传递给Node.js?

5

我正在使用 Git Bash for Windows(也就是右键单击某个目录,然后从上下文菜单中选择“Git Bash here”)。Node.js 版本为 v5.10.1。

这是我的完整 Node.js 脚本 example.js

console.log(process.argv);

这是我的命令行和输出结果:

$ node example.js "https://example.com"
[ 'C:\\...\\node.exe',
  'C:\\...\\example.js',
  'https:\\example.com' ]

注意输入参数"https://example.com"有两个正斜杠,但结果字符串"https:\\example.com"只有一个反斜杠

我发现无论在命令行中使用多少个反斜杠转义(例如"https:\\/example.com")或添加多少个正斜杠(例如"https:////////example.com"),都不能阻止这种情况发生。结果始终是一个反斜杠。

使用相同的Node.js可执行文件从普通的Windows cmd.exe窗口运行相同的脚本不会导致此行为。从Git Bash for Windows运行等效的Python脚本也不会导致此行为。

更新

看这个:

$ node.exe -e "console.log(process.argv)" "https://example.com"
[ 'C:\\...\\node.exe',
  'https://example.com' ]

$ node -e "console.log(process.argv)" "https://example.com"
[ 'C:\\...\\node.exe',
  'https:\\example.com' ]

为什么从调用结尾中删除“.exe”会导致反斜杠反转? 我使用的是NVM 1.1.0,如果这有关的话。 which node.exewhich node 返回相同的结果,都指向该EXE文件。该目录中没有名为node的单独文件。这在Node.js 5.10.1和Node.js 6.0.0上都发生。


刚在 Windows 上用 node 6.0.0 和 git bash 测试了一下,没什么奇怪的地方:node.exe -e 'console.log(process.argv)' 'http://example.com' - Andreas Louv
1
我找到的解决方法是在Git Bash for Windows命令行中使用node.exe,而不是使用node - qntm
在Windows的Git Bash中使用redis-cli和.sh脚本时遇到了相同的问题。我将"redis-cli set /keyvalue/stuff "myvalue""作为参数传递给redis-cli,然后当我在redis-cli keys *中查看输出时,git bash会在/keyvalue/stuff之前添加c:\mygitdirectory。 - joezen777
这可能适用于一些https://dev59.com/zGw05IYBdhLWcg3wahNN - joezen777
你尝试使用单引号 ('https://example.com') 了吗? - Shammel Lee
显示剩余7条评论
1个回答

1
Git Bash基于MSYS2,其执行类似MinGW的“POSIX路径转换”。在调用类似Windows的可执行文件时,此转换将具有斜杠的路径转换为Windows路径。MSYS2可能以不同于MinGW的方式进行了一些“类似Windows”的检测。
评论中joezen777提到的问题指向解决方案:只需将;https:;http:添加到MSYS2_ARG_CONV_EXCL即可。文档可在https://github.com/msys2/msys2/wiki/Porting找到。

以为是Node修改了参数 - 从Git Bash切换到PowerShell解决了问题。 - Levi Fuller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接