Как указать в файле bat, что скрипт должен вызываться в режиме Cygwin? - PullRequest
2 голосов
/ 05 января 2011

Я написал Perl-скрипт, который использует некоторые команды Linux (grep, ls и т. Д.).Я могу успешно запустить это из Cygwin или Linux.Я хочу, чтобы эта задача периодически запускалась на Windows Server, на котором установлен Cygwin.Я планировал использовать планировщик задач Windows.Но я не уверен, как указать в файле bat Windows, что мой Perl-скрипт должен вызываться в режиме Cygwin?

РЕДАКТИРОВАТЬ: Я попробовал команду от Гленна.Когда я попытался запустить Perl-скрипт, он, похоже, не отвечает.Итак, я попробовал с примером сценария: test.sh, который имеет следующие две строки:

ls -l
cd ..

Вот снимок экрана, который я получаю:

alt text

Ответы [ 4 ]

4 голосов
/ 05 января 2011

Я не большой поклонник cygwin и лично предпочитаю скомпилированные версии инструментов GNU, например. GnuWin32 .

Мне также интересно, почему вы используете grep, ls и т. Д. Из скрипта Perl. Большая часть этой функциональности может быть обработана непосредственно Perl, и это обычно приводит к гораздо лучшей переносимости и надежности.

3 голосов
/ 05 января 2011

Возможно (не проверено): c:\cygwin\bash.exe -c /path/to/your/script.pl

UPDATE:

Последнее сообщение об ошибке выявляет одну проблему: ваш скрипт представляет собой файл формата DOS (окончания строк CRLF), а cygwin ищет формат UNIX (окончания строк LF). Бездомная каретка возвращается в конце каждой строки - проблема. Например, нет каталога с именем ".. \ r"

Используйте текстовый редактор, где вы можете указать окончания строки для использования. В оболочке bash вы можете сделать dos2unix test.sh

Ошибка ls указывает на то, что / bin и / usr / bin не входят в $ PATH вашей среды bash - это правда?

1 голос
/ 10 января 2011

Вы запускаете Cygwin Bash, но вам все еще нужно настроить PATH. Если вы не установите его в своем профиле, но затем инициализируйте профиль с помощью bash -i.

  1. Либо укажите полный путь к необходимым командам cygwin, например /bin/ls, /bin/grep,
  2. или добавьте c:\cygwin\bin и, возможно, другие пути к вашему PATH заранее.

2-й предпочтительный. Как

schedule.bat:
PATH=C:\cygwin\bin;%PATH%
sh -c ./schedule.sh

schedule.sh:
#!/bin/sh
ls ...
grep ...
perl ... 

schedule.sh получает окружение с PATH от родительского процесса sh.exe, который наследует его от вашей летучей мыши. Отделение сценариев оболочки от командных файлов только для упрощения тестирования. Вы также можете вызвать большинство программ cygwin из cmd.exe.

Вы не можете установить /usr/bin в вашей DOS PATH, DOS не будет иметь директорию c:/usr. И это работает только если вы находитесь в C:

1 голос
/ 06 января 2011

Просто добавьте cygwin на свой путь перед запуском perl. Например, я часто запускаю find в оболочке dos, но получаю довольно ужасное сообщение FIND: неверный формат параметра . Ба! Вместо этого я должен запустить find через файл dos cmd cyg.cmd:

c:> find . -iname interesting.txt
FIND: Parameter format not correct
c:> cyg find . -iname interesting.txt
sub/sub/interesting.TXT
c:> type bin\cyg.cmd
setlocal
PATH=c:\Progs\Cygwin\bin;%PATH%
%1 %2 %3 %4 %5 %6 %7 %8 %9
endlocal

Важным битом здесь является PATH=c:\Progs\Cygwin\bin;%PATH%.

Кстати, я предпочитаю версии инструментов cygwin, а не их эквиваленты MinGW - среда гораздо ближе к Mac / Linux, и переносимость важна в конце концов.

...