為什麼 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:/”。

即使使用 hack 將“/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,除非您創建了符號連結/c/schema.xsd

當您使用一個檔案作為參數(bash/cygwin 識別)呼叫 xcj 時,它將接收檔案句柄而不是其路徑。但是,如果它只是一個字串,則該字串將作為參數傳遞給應用程序,而無需進一步解析和字串擴展。

您可以透過嘗試使用 cygpath 來解決此問題(請參閱有效使用 cygwincygpath資訊)傳遞正確的 Windows 路徑,或者,如果只有一個文件,請嘗試傳遞正確的 (unix/cygwin) 文件路徑。

相關內容