2010-06-18 72 views
3

我们需要支持一个提供Unix和Win32端口的传统应用程序。不幸的是,在游戏后期,只有unix端口用ksh脚本编写了大量的胶合代码,并且Win32端口失去了奇偶校验。我一直在尝试恢复它,并且我一直在尝试一些ksh-for-windows解决方案(以前曾使用过Zsh的本地构建),但在Windows 7下似乎没有任何适当的工作:Cygwin拒绝使用Win32和unix风格的路径,所以一些错综复杂的脚本中断。 SUA/SFU的情况相同。 UWin在Windows 7上无法使用。我以前使用的较旧的本地端口(WinZsh)也不能在7以下使用。Korn-Shell for Windows 7?

因此,我需要一个可在Win下工作的Korn-shell工作环境7(64位会很棒,但我已经失去了希望),它可以与cmd.exe风格的路径(c:/ path/to/app)和标准Unix路径(/ path/to/app)一起工作。任何线索?

回答

2

Cygwin确实支持C:/ path/to/app样式路径,即使它喜欢抱怨它们。 (设置CYGWIN = nodosfilewarning会关闭它)。即使支持带反斜杠的路径,但它们需要适当的引用来阻止shell解释它们。

可以通过Cygwin的setup.exe安装“Public Domain Korn Shell”Pdksh。

+0

虽然Cygwin绝对不符合我的规格,但我并不知道CYGWIN标志被标记为最好...... – 2010-06-21 10:33:31

+0

壳是最难以移植到本地Windows的Unix程序之一,因为它们广泛且fork()/ exec(),信号和控制终端等Unix特有概念的非平凡使用。 – ak2 2010-06-21 16:02:16

3

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

这就是说,Interix中有dos2unixpathunix2dospath(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,独自离开休息。