%20com%20caminhos%20unix%2C%20mas%20n%C3%A3o%20com%20cygwin%3F.png)
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:
- você está usando um executável do Windows que espera caminhos do Windows e
- bash expande caminhos para seus próprios caminhos cygwin nativos.
No cygwin, um caminho correto para c:\schema.xsd
seria 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.xsd
como 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).