¿Cómo es que git bash puede llamar a herramientas java (xjc.exe) con rutas Unix pero no cygwin?

¿Cómo es que git bash puede llamar a herramientas java (xjc.exe) con rutas Unix pero no cygwin?

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:

  1. está utilizando un ejecutable de Windows que espera rutas de Windows y
  2. bash expande las rutas a sus propias rutas nativas de cygwin.

En cygwin, una ruta correcta para c:\schema.xsdse 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.xsdcomo 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).

información relacionada