なぜ git bash は UNIX パスで Java ツール (xjc.exe) を呼び出すことができるのに、Cygwin では呼び出せないのでしょうか?

なぜ git bash は UNIX パスで Java ツール (xjc.exe) を呼び出すことができるのに、Cygwin では呼び出せないのでしょうか?

CMD.exe から、次のように xjc を実行できます。

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

git Bash から、次のように xjc を実行できます。

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

Cygwin に関しては、CMD.exe 構文を使用して xjc.exe を呼び出す場合にのみ動作します。

この問題が発生するのは、問題が発生したスクリプトが現在のディレクトリへのパスを取得するために ${PWD} に依存しており、これが "c:/" ではなく "/c" に解決されるためです。

「/c」を「c:/」に置き換えるハックを使用しても、git Bash によって呼び出されたときに xjc が UNIX パスを受け入れるのに、Cygwin によって呼び出されたときには受け入れない理由を知りたいです。

答え1

問題は2つあります。

  1. Windowsパスを期待するWindows実行ファイルを使用しています。
  2. bash はパスを独自のネイティブ cygwin パスに拡張します。

Cygwinでは、正しいパスは次のようc:\schema.xsdに変換されます/cygdrive/c/schema.xsdない /c/schema.xsd(シンボリックリンクを作成しない限り) git-bash (msysgit に同梱されているものでしょうか?) が/c/schema.xsd有効なパスとして使用を許可する理由が私にはわかりません。

1 つのファイルをパラメータとして (bash/cygwin が認識する) xcj を呼び出すと、パスではなくファイルハンドルが受信されます。ただし、それが単なる文字列である場合、その文字列はそれ以上解析および文字列拡張されずに、パラメータとしてアプリケーションに渡されます。

この問題に対処するには、cygpath を使用するか (Cygwin を効果的に使用するそしてcygpath 情報) を使用して正しい Windows パスを渡すか、ファイルが 1 つだけの場合は、正しい (unix/cygwin) ファイル パスを渡すようにしてください。

関連情報