почему git bash может вызывать инструменты java (xjc.exe) с путями unix, но не cygwin?

почему git bash может вызывать инструменты java (xjc.exe) с путями unix, но не cygwin?

Из CMD.exe я могу запустить xjc следующим образом:

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

Из git Bash я могу запустить xjc следующим образом:

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

Что касается Cygwin, то я могу заставить его работать, только если вызову xjc.exe, используя синтаксис CMD.exe.

Это проблематично, поскольку скрипт, вызвавший эту проблему, использует ${PWD} для получения пути к текущему каталогу, который разрешается в «/c», а не в «c:/».

Даже с хаком, заменяющим «/c» на «c:/», мне все равно хотелось бы знать, почему xjc принимает путь unix при вызове из git Bash, но не из Cygwin.

решение1

Проблема двоякая:

  1. вы используете исполняемый файл Windows, который ожидает пути Windows и
  2. bash расширяет пути до собственных путей cygwin.

В cygwin правильный путь c:\schema.xsdбудет преобразован в /cygdrive/c/schema.xsd(нет /c/schema.xsd, если только вы не создали символическую ссылку.) Почему git-bash (это тот, который поставляется с msysgit?) позволяет вам использовать его /c/schema.xsdв качестве допустимого пути, мне непонятно.

Когда вы вызываете xcj с одним файлом в качестве параметра (который распознается bash/cygwin), он получит дескриптор файла, а не его путь. Однако, если это просто строка, эта строка будет передана в качестве параметра приложению без дальнейшего анализа и расширения строки.

Вы можете решить эту проблему, попытавшись использовать cygpath (см.эффективное использование-cygwinиcygpath-информация) для передачи правильного пути Windows или, если это только один файл, попробуйте передать правильный путь к файлу (unix/cygwin).

Связанный контент