适用于Windows 7的Korn Shell?

适用于Windows 7的Korn Shell?,shell,windows-7,cygwin,gnuwin32,Shell,Windows 7,Cygwin,Gnuwin32,我们需要支持提供Unix和Win32端口的传统应用程序。不幸的是,在游戏的后期,许多粘合代码仅为unix端口用ksh脚本编写,Win32端口失去了奇偶校验。我一直在尝试恢复它,我一直在尝试一些ksh for windows解决方案(过去使用的是Zsh的本机版本),但在windows 7下似乎没有任何东西能正常工作:Cygwin拒绝同时使用Win32和unix样式的路径,因此一些复杂的脚本中断。SUA/SFU的情况也一样。UWin在Windows 7上不工作。我以前使用的旧的本机端口(WinZsh

我们需要支持提供Unix和Win32端口的传统应用程序。不幸的是,在游戏的后期,许多粘合代码仅为unix端口用ksh脚本编写,Win32端口失去了奇偶校验。我一直在尝试恢复它,我一直在尝试一些ksh for windows解决方案(过去使用的是Zsh的本机版本),但在windows 7下似乎没有任何东西能正常工作:Cygwin拒绝同时使用Win32和unix样式的路径,因此一些复杂的脚本中断。SUA/SFU的情况也一样。UWin在Windows 7上不工作。我以前使用的旧的本机端口(WinZsh)在7下也不再工作


因此,我需要一个类似Korn shell的工作环境,它可以在Win 7下工作(64位可能很棒,但我已经失去了希望),并且可以同时使用cmd.exe样式的路径(c:/path/to/app)和标准Unix路径(/path/to/app)。有什么线索吗?

Cygwin支持C:/path/to/app样式的路径,尽管它喜欢抱怨这些路径。(设置CYGWIN=nodosfilewarning将使其关闭)。甚至支持带有反斜杠的路径,但它们需要适当的引用来阻止shell解释它们


可以通过Cygwin的setup.exe安装“公共域Korn Shell”Pdksh。

Cygwin幸运地用mksh替换了Pdksh(自1999年以来已死亡)。但是,mksh将*不*支持非POSIX路径,因为它主要是一个BSD Unix shell,它的优势之一是在所有平台上都能使用相同的路径

也就是说,Interix中有
dos2unixpath
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
,剩下的就不用管了。

我不知道CYGWIN标志,它被标记为最佳,尽管CYGWIN肯定不符合我的规范…shell是最难移植到本机Windows的Unix程序之一,因为它们广泛而非琐碎地使用了Unix特定的概念,如fork()/exec()、信号和控制终端。这是一个很好的例子。我想将我的bash和原始posixsh脚本转换为(m)ksh,以平衡可靠性(set-euo-pipefail)和性能。但我不想牺牲跨平台支持,是的,甚至包括Windows,所以我们现在只能使用缓慢的OLBash。