Невозможно выполнить сценарий оболочки в Cygwin как сценарий KornShell.

Я редко прикасаюсь к шелл-скриптам, у нас есть другой отдел, который их пишет, так что у меня есть понимание их написания, но нет опыта. Однако все они кажутся довольно бесполезными с моей проблемой.

Я пытаюсь выполнить некоторые сценарии KornShell (ksh) на машине с Windows, используя Cygwin — мы используем их для запуска наших серверов Oracle WebLogic, теперь они просто не будут выполняться. Раньше я мог выполнять эти же самые сценарии на своей старой машине.

Теперь я сузил это до факта «магического числа» или чего-то еще в начале скрипта, где он указывает путь интерпретатора скрипта:

i.e.:

#!/bin/ksh

если я изменю его, чтобы он выполнялся как простой bash, он работает, т.е.:

#!/bin/sh

Я проверил пакеты, установленные для cygwin, и теперь я установил следующие оболочки:

  • mksh MirdBSD KornShell
  • разбить оболочку борна снова
  • зш з оболочка

Должен ли я ожидать увидеть ksh.exe в моем каталоге cygwin/bin? есть системный файл «ksh», который, как я предполагал, каким-то образом связывает его с одним из других исполняемых файлов оболочки, например mksh.exe.

Я понимаю, что мое объяснение вполне может быть наивным. Но, как говорится, любая помощь будет очень признательна.

Спасибо.


person Joe    schedule 25.01.2013    source источник
comment
Что именно означает просто не выполнять? Вы получаете сообщение об ошибке?   -  person Keith Thompson    schedule 10.12.2013


Ответы (4)


Я полагаю, что оболочка MirBSD korn называется mksh. Вы можете проверить это и найти правильный путь, набрав

% which mksh
% which ksh

или если у вас нет which,

% type -p mksh
% type -p ksh

или, если это тоже не удается, проверьте /etc/shells, в котором должны быть перечислены все допустимые оболочки в системе:

% grep ksh /etc/shells

Вам нужно указать полный путь после строки #!. Вероятно, это будет /bin/mksh, поэтому ваша строка должна выглядеть так:

#!/bin/mksh
person Daniel Roethlisberger    schedule 25.01.2013
comment
Если вы не хотите устанавливать ksh в свой Cygwin, тогда #!/bin/mksh должен работать хорошо. - person javaPlease42; 11.01.2014

Вы, вероятно, уже исправили это, но ответ был нет, ваш Cygwin (пока) не знает о ksh.

Я решил эту проблему, запустив установку cygwin в режиме командной строки с атрибутом -P ksh (как описано в http://www.ehow.com/how_8611406_install-ksh-cygwin.html).

person Asurya    schedule 21.10.2013

Вы можете запустить ksh с помощью bat-файла

C:\cygwin\bin\dos2unix kshfilename.ksh

C:\cygwin\bin\bash kshfilename.ksh

Запуск сценария оболочки через Cygwin в Windows

person user3178379    schedule 09.01.2014

Установите KornShell (ksh) в Cygwin, выполнив следующий процесс:

  1. Скачать: ksh.2012- 08-06.cygwin.i386.gz
  2. Install ksh via Cygwin setup.
    1. Execture Cygwin setup.exe
    2. Выберите: Установить из локального каталога.
    3. Выберите ksh.2012-08-06.cygwin.i386.gz в качестве локального каталога пакетов. введите здесь описание изображения
    4. Завершите настройку Cygwin.
  3. Перезапустите Cygwin.
person javaPlease42    schedule 11.01.2014