更新(2016年8月):
msys2がインストールに含まれるようになったため、この質問はもはや関係ありませんcygpath
。
..。
ここに私の研究を要約します。
MSYSで同等のcygpathは、次のコマンドを使用することです。
{ cd /c/some/path && pwd -W; } | sed 's|/|\\|g'
このアプローチの問題は、既存のパスが必要なことです。たとえば、c:\some\path
は既存のディレクトリである必要があります。ただし、実際のcygpathは、存在しないパスをサポートします。
したがって、存在しないディレクトリへのパスを取得する必要がある場合は、パスのsed変換にフォールバックできます。
{ cd 2>/dev/null /c/some/path && pwd -W ||
echo /c/some/path | sed 's|^/\([a-z,A-Z]\)/|\1:/|'; } | sed 's|/|\\|g'
一口のスラッシュは、の引用規則を満たすためにありsed
ます。したがって、c:\some\path
PCに存在しない場合は、スラッシュからバックスラッシュに変換し、(または他のドライブ文字)に置き換えようとし/c/
ますc:\
。/bin/does-not-exist
これの唯一の欠点は、またはなどのマウントされたコンポーネントを含む存在しないパスが正しく機能しないこと/usr/bin/does-not-exist
です。
もう1つのアプローチは、MSYSでcygwinのcygpathを使用することです。cygwinはグローバル環境変数CYGPATHを設定しているようです。つまり、通常のcmd.exeから使用できます。
%CYGPATH% -w /c/some/path
C:\some\path
またはMSYSから:
$CYGPATH -w /c/some/path
C:\some\path
cygwinでポイント/c
するように設定している限り。/cygdrive/c
ただし、このアプローチ/usr
では、MSYSではなくcygwinインストールにあるユーザーが印刷されます。
要するに、msysコマンドライン引数変換ロジックによって自動的に処理されない場合のために、msysは実際にデフォルトのツールセットに実際のcygpathを含める必要があると思います