%20%D1%81%20%D0%BF%D1%83%D1%82%D1%8F%D0%BC%D0%B8%20unix%2C%20%D0%BD%D0%BE%20%D0%BD%D0%B5%20cygwin%3F.png)
Из 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
Проблема двоякая:
- вы используете исполняемый файл Windows, который ожидает пути Windows и
- 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).