Git Bash-开始时带有'/'的字符串参数被扩展到文件路径。如何停止呢?

时间:2019-01-18 17:42:17

标签: git-bash

今天早些时候,我试图生成一个在SubjectAltName扩展名中带有DNSName条目的证书:

$ openssl req -new -subj“ / C = GB / CN = foo” -addext“ subjectAltName = DNS:foo.co.uk” -addext“ certificatePolicies = 1.2.3.4” -key ./private-key。 pem -out〜/ req.pem

此命令导致以下错误消息:

名称应采用/ type0 = value0 / type1 = value1 / type2 = ...的格式,其中的字符可以用进行转义。该名称不是这种格式:'C:/ Program Files / Git / C = GB / CN = foo' 提出证书申请时遇到问题

如何阻止Git Bash将此字符串参数视为文件路径,或者至少阻止它进行此更改?

3 个答案:

答案 0 :(得分:5)

如果脚本访问文件,则使用select top 1 j.regNo, g.garageName, datediff(day,j.dateOut,j.dateIn) as [Number of Days] from Job j join Garage g on j.garageID = g.garageID order by datediff(day,j.dateOut,j.dateIn) desc 可能会出现问题。

在OpenSSL的特定情况下,带双斜杠的前缀不起作用,因为它会导致第一个DN段密钥被读为“ / C”而不是“ C”,因此OpenSSL删除它,输出: / p>

MSYS_NO_PATHCONV=1

相反,我使用了一个函数来检测是否在Windows的bash上运行,如果有,则以“虚拟”段作为前缀:

req: Skipping unknown attribute "/C"

答案 1 :(得分:2)

今天Git Bash 2.21.0更新的发行说明将其称为一个已知问题。幸运的是,他们还描述了解决该问题的两种方法:

  

如果您指定以斜杠开头的命令行选项,则POSIX到Windows的路径转换将在转换例如将“ /usr/bin/bash.exe”转换为“ C:\ Program Files \ Git \ usr \ bin \ bash.exe”。当不需要时-例如“ --upload-pack = / opt / git / bin / git-upload-pack”或“ -L / regex /”-您需要临时设置环境变量MSYS_NO_PATHCONV,如下所示:

     

MSYS_NO_PATHCONV = 1 git blame -L / pathconv / msys2_path_conv.cc

     

或者,您可以将第一个斜杠加倍,以避免POSIX到Windows的路径转换,例如“ //usr/bin/bash.exe”。

答案 2 :(得分:0)

使用bash遇到相同的问题,但是在Powershell中运行完全相同的命令对我来说有效。希望这会对某人有所帮助。