%20con%20rutas%20Unix%20pero%20no%20cygwin%3F.png)
Desde CMD.exe, puedo ejecutar xjc de la siguiente manera:
xjc "c:/schema.xsd" -p abc -d "temp"
Desde git Bash, puedo ejecutar xjc de la siguiente manera:
xjc "/c/schema.xsd" -p abc -d "temp"
En lo que respecta a Cygwin, puedo hacerlo funcionar sólo si llamo a xjc.exe usando la sintaxis CMD.exe.
Esto es problemático porque el script que encontró este problema depende de ${PWD} para obtener la ruta al directorio actual, que se resuelve en "/c", no en "c:/".
Incluso con un truco para reemplazar "/c" con "c:/", todavía me gustaría saber por qué xjc acepta una ruta Unix cuando lo llama git Bash pero no Cygwin.
Respuesta1
El problema es doble:
- está utilizando un ejecutable de Windows que espera rutas de Windows y
- bash expande las rutas a sus propias rutas nativas de cygwin.
En cygwin, una ruta correcta para c:\schema.xsd
se traduciría en /cygdrive/c/schema.xsd
(no /c/schema.xsd
, a menos que haya creado un enlace simbólico). Por qué git-bash (¿es ese el que envía msysgit?) le permite usarlo /c/schema.xsd
como ruta válida, no lo entiendo.
Cuando llama a xcj con un archivo como parámetro (que bash/cygwin reconoce), recibirá el identificador del archivo y no su ruta. Sin embargo, si es solo una cadena, esa cadena se pasará como parámetro a la aplicación sin más análisis ni expansión de la cadena.
Puedes abordar este problema intentando usar cygpath (verusando-cygwin-eficazmenteyinformación-cygpath) para pasar la ruta correcta de Windows o, si es solo un archivo, intente pasar la ruta correcta del archivo (Unix/cygwin).