Корн-Шелл для Windows 7?
Нам нужно поддерживать устаревшее приложение, которое предоставляет порты Unix и Win32. К сожалению, позже в игре в скриптах ksh было написано много связующего кода только для порта unix, и порт 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:/ путь / к / приложению) и стандартные пути Unix (/ путь / к / приложению). Есть какие-нибудь подсказки?
2 ответа
Cygwin поддерживает пути в стиле C:/path/to/app, хотя ему нравится жаловаться на них. (Установка CYGWIN=nodosfilewarning отключит его). Поддерживаются даже пути с обратной косой чертой, но они должны иметь соответствующие кавычки, чтобы оболочка не могла их интерпретировать.
Pdksh, "Public Domain Korn Shell", может быть установлен с помощью setup.exe Cygwin.
Кигвин, к счастью, заменил pdksh (умерший с 1999 года) на mksh. Тем не менее, mksh * не * будет поддерживать не-POSIX-пути, так как это, прежде всего, оболочка BSD Unix, и одна из его сильных сторон - одинаковая работа на всех платформах.
Как говорится, есть dos2unixpath
а также unix2dospath
(IIRC) в Interix. Может быть, вы можете использовать их.
Нечто подобное может даже работать:
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
и оставляет остальное в покое.