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

1

Do CMD.exe, posso executar o xjc da seguinte forma:

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

Do git Bash, eu posso executar o xjc da seguinte forma:

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

No que diz respeito ao Cygwin, posso fazê-lo funcionar apenas se eu chamar o xjc.exe usando a sintaxe do CMD.exe.

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

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

    
por J Smith 11.07.2014 / 17:56

1 resposta

1

O problema é duplo:

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

No cygwin, um caminho correto para c:\schema.xsd se traduziria em /cygdrive/c/schema.xsd ( não /c/schema.xsd , a menos que você tenha criado um symlink.) Por que o git-bash (aquele que é enviado por msysgit?) Permite que você use /c/schema.xsd como caminho válido, está além de mim.

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

Você pode abordar esse problema tentando usar o cygpath (consulte using-cygwin-effective e cygpath-info ) para passar o caminho correto das janelas ou, se for apenas um arquivo, tente passar o caminho de arquivo correto (unix / cygwin).

    
por 13.07.2014 / 17:38