como é que o git bash pode chamar ferramentas java (xjc.exe) com caminhos unix, mas não com cygwin?

como é que o git bash pode chamar ferramentas java (xjc.exe) com caminhos unix, mas não com cygwin?

No CMD.exe, posso executar o xjc da seguinte maneira:

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

No git Bash, posso executar o xjc da seguinte maneira:

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

No que diz respeito ao Cygwin, só consigo fazê-lo funcionar se chamar xjc.exe usando a sintaxe CMD.exe.

Isso é problemático porque o script que encontrou esse problema depende de ${PWD} para obter o caminho para o diretório atual, que é resolvido como "/c", não "c:/".

Mesmo com um hack para substituir "/c" por "c:/", ainda gostaria de saber por que o xjc aceita um caminho unix quando chamado pelo git Bash, mas não pelo Cygwin.

Responder1

O problema é duplo:

  1. você está usando um executável do Windows que espera caminhos do Windows e
  2. bash expande caminhos para seus próprios caminhos cygwin nativos.

No cygwin, um caminho correto para c:\schema.xsdseria traduzido em /cygdrive/c/schema.xsd(não /c/schema.xsd, a menos que você tenha criado um link simbólico.) Por que o git-bash (é aquele enviado pelo msysgit?) permite que você use /c/schema.xsdcomo caminho válido, está além da minha compreensão.

Quando você chama xcj com um arquivo como parâmetro (que o bash/cygwin reconhece), ele receberá o filehandle e não seu caminho. No entanto, se for apenas uma string, essa string será passada como parâmetro para o aplicativo sem análise adicional e expansão da string.

Você pode abordar esse problema tentando usar o cygpath (consulteusando-cygwin-efetivamenteeinformações do cygpath) para passar o caminho correto do Windows ou, se for apenas um arquivo, tente passar o caminho correto do arquivo (unix/cygwin).

informação relacionada