4

Unix と Win32 ポートを提供するレガシー アプリをサポートする必要があります。残念なことに、このゲームの後半で、多くのグルー コードが unix ポート専用の ksh スクリプトで記述され、Win32 ポートはパリティを失ってしまいました。私はそれを復活させようとしており、いくつかの ksh-for-windows ソリューション (過去に動作していた Zsh のネイティブ ビルド) を試してきましたが、Windows 7 では何も正しく動作していないようです: Cygwin は使用を拒否しますWin32 と UNIX スタイルの両方のパスであるため、一部の複雑なスクリプトは壊れます。SUA/SFU についても同じ状況です。UWin は Windows 7 では動作しません。私が使用していた古いネイティブ ポート (WinZsh) も、7 では動作しなくなりました。

したがって、Win 7 で動作し (64 ビットは最高ですが、希望を失いました)、両方の cmd.exe スタイルのパス (c:/ path/to/app) および標準の Unix パス (/path/to/app) です。手がかりはありますか?

4

2 に答える 2

4

Cygwin は幸運にも pdksh (1999 年以降廃止) を mksh に置き換えました。ただし、mksh主に BSD Unix シェルであり、その長所の 1 つはすべてのプラットフォームで同じように機能するため、非 POSIX パスをサポートすることは*ありません*。

そうは言っても、Interix にはdos2unixpathand unix2dospath(IIRC) があります。多分あなたはそれらを使うことができます。

このようなものもうまくいくかもしれません:

function dos2unixpath {
    local _x=$1
    [[ $_x = [A-Za-z]:[\\/]* ]] && _x=/dev/fs/${_x::1}/${_x:3}
    print -r -- "${_x//\\//}"
}

これは、に変換x:\foo\barされ、残りはそのままになります。/dev/fs/x/foo/bar..\bla../bla

于 2012-11-08T20:23:32.320 に答える
3

Cygwinは、C:/ path / to / appスタイルのパスについて文句を言うのが好きですが、それらをサポートしています。(CYGWIN = nodosfilewarningを設定するとシャットダウンします)。バックスラッシュのあるパスもサポートされていますが、シェルがバックスラッシュを解釈しないようにするには、適切な引用符が必要です。

「パブリックドメインKornシェル」であるPdkshは、Cygwinのsetup.exeを介してインストールできます。

于 2010-06-19T09:10:47.777 に答える