为什么 git bash 可以使用 unix 路径调用 java 工具(xjc.exe)但不能调用 cygwin?

为什么 git bash 可以使用 unix 路径调用 java 工具(xjc.exe)但不能调用 cygwin?

从 CMD.exe,我可以按如下方式运行 xjc:

xjc "c:/schema.xsd" -p abc -d "temp"

从 git Bash,我可以按如下方式运行 xjc:

xjc "/c/schema.xsd" -p abc -d "temp"

就 Cygwin 而言,只有使用 CMD.exe 语法调用 xjc.exe 才能使其工作。

这是有问题的,因为遇到此问题的脚本依赖于 ${PWD} 来获取当前目录的路径,该路径解析为“/c”,而不是“c:/”。

即使用“c:/”替换“/c”,我仍然想知道为什么 xjc 在由 git Bash 调用时接受 unix 路径,但在 Cygwin 调用时却不接受。

答案1

问题有两个方面:

  1. 您正在使用需要 Windows 路径的 Windows 可执行文件,并且
  2. bash 将路径扩展为其自己的本机 cygwin 路径。

在 cygwin 中,正确的路径c:\schema.xsd应为/cygdrive/c/schema.xsd不是 /c/schema.xsd,除非您创建了符号链接。)为什么 git-bash(msy​​sgit 附带的那个吗?)允许您用作/c/schema.xsd有效路径,这让我无法理解。

当您使用一个文件作为参数(bash/cygwin 可识别)调用 xcj 时,它将接收文件句柄而不是其路径。但是,如果它只是一个字符串,则该字符串将作为参数传递给应用程序,而无需进一步解析和字符串扩展。

您可以通过尝试使用 cygpath 来解决此问题(请参阅有效使用 cygwin cygpath 信息) 来传递正确的 Windows 路径,或者,如果只有一个文件,则尝试传递正确的 (unix/cygwin) 文件路径。

相关内容