cygwin 環境の シェルスクリプトで Windows 形式のパスを得る方法

java で動作する XML チェッカー validateXML を使おうとしてつまづいたので書いておきます。

パスの表記は Windows 環境では「c:\foo\bar\」または「c:/foo/bar/」のように書きますが、cygwin 環境では「/cygdrive/c/foo/bar」のように書きます。これはシェルスクリプト上で pwd などのコマンドが返してくるパス名も同様です。cygwin 環境のプログラムに渡すだけなら全く問題ないんですが、今回は自前でインストールした java.exe を使う必要があり、当然ながら cygwin 形式のパス表記は理解してもらえません。変換する方法をちょっとググった程度では見つけられなかったので自分で書いてみました。

validateXML を置いたディレクトリ構造は以下を想定しています。

  • ./validateXML.sh
  • ./libs/validateXML-1.1-bin.jar

そして validateXML.sh の中身が以下のようになります。

#!/bin/sh
SCRIPTDIR=`dirname $0`
SCRIPTDIRWIN=`echo $SCRIPTDIR | sed -e 's|/cygdrive/\(.\)|\1:|g'`
java -jar $SCRIPTDIRWIN/libs/validateXML-1.1-bin.jar -verbose -in $1

$SCRIPTDIR に cygwin 形式のパスが、$SCRIPTDIRWIN に WINDOWS 形式のパス名が入ります。

まあこれだけなんですが…もし同様につまづいた方の参考になれば幸いです。というか、「それ○○でできるよ」的な方法があるに違いない…。orz