wie kommt es, dass Git Bash Java-Tools (xjc.exe) mit Unix-Pfaden aufrufen kann, Cygwin aber nicht?

wie kommt es, dass Git Bash Java-Tools (xjc.exe) mit Unix-Pfaden aufrufen kann, Cygwin aber nicht?

Von CMD.exe aus kann ich xjc wie folgt ausführen:

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

Von Git Bash aus kann ich xjc wie folgt ausführen:

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

Bei Cygwin kann ich es nur zum Laufen bringen, wenn ich xjc.exe mit der CMD.exe-Syntax aufrufe.

Dies ist problematisch, da das Skript, bei dem dieses Problem auftrat, auf ${PWD} angewiesen ist, um den Pfad zum aktuellen Verzeichnis abzurufen, der sich in „/c“ und nicht in „c:/“ auflöst.

Selbst mit einem Hack zum Ersetzen von „/c“ durch „c:/“ würde ich immer noch gerne wissen, warum xjc einen Unix-Pfad akzeptiert, wenn es von Git Bash aufgerufen wird, aber nicht von Cygwin.

Antwort1

Das Problem ist zweifach:

  1. Sie verwenden eine Windows-Programmdatei, die Windows-Pfade erwartet und
  2. Bash erweitert Pfade zu seinen eigenen nativen Cygwin-Pfaden.

In Cygwin c:\schema.xsdwürde ein korrekter Pfad für wie folgt übersetzt werden /cygdrive/c/schema.xsd: (nicht /c/schema.xsd, es sei denn, Sie haben einen symbolischen Link erstellt.) Warum git-bash (ist das das von msysgit mitgelieferte?) Ihnen die Verwendung /c/schema.xsdals gültigen Pfad zulässt, ist mir schleierhaft.

Wenn Sie xcj mit einer Datei als Parameter aufrufen (die von bash/cygwin erkannt wird), erhält es den Dateihandle und nicht den Pfad. Wenn es sich jedoch nur um eine Zeichenfolge handelt, wird diese Zeichenfolge ohne weitere Analyse und Zeichenfolgenerweiterung als Parameter an die Anwendung übergeben.

Sie können dieses Problem entweder lösen, indem Sie versuchen, cygpath zu verwenden (sieheCygwin effektiv nutzenUndCygpath-Informationen), um den richtigen Windows-Pfad weiterzugeben, oder versuchen Sie, wenn es nur eine Datei ist, den richtigen (Unix/Cygwin-)Dateipfad weiterzugeben.

verwandte Informationen