2010-06-18 70 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,獨自離開休息。