Корн-Шелл для 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 и оставляет остальное в покое.

Другие вопросы по тегам