Команда сценария cywin bash не найдена при вызове из пакета - PullRequest
11 голосов
/ 29 июля 2009
#!/bin/bash
echo "Testing"
cd "/cygdrive/x/Internal Communications/Riccardo/"
filename=htdocs-`date +%A`.tar.gz
tar cvzf $filename "/cygdrive/c/Program Files/Zend/Apache2/htdocs"

Приведенный выше скрипт работает, когда он вызывается из консоли cygwin, но когда я пытаюсь вызвать его из командного файла, я получаю «команда не найдена» для команды date и tar. Я думаю, что bash.exe не настроен путь PATH.

Мне нужно запустить этот скрипт из этого пакетного файла, потому что я хочу добавить скрипт в планировщик задач.

Ответы [ 5 ]

17 голосов
/ 29 июля 2009

Как уже было сказано, вам нужно добавить бинарные файлы Cygwin к вашему пути. Для этого щелкните правой кнопкой мыши «Мой компьютер», нажмите «Свойства», затем «Дополнительно», затем «Переменные среды».

Создайте новую переменную среды с именем "CYGWIN_HOME" и значением "C: \ cygwin" (или там, где вы установили cygwin. Расположение по умолчанию - "C: \ cygwin \", поэтому это, вероятно, должно работать для вас).

Затем отредактируйте переменную среды с именем «PATH» и добавьте в конец следующее:

;% CYGWIN_HOME% \ Bin;% CYGWIN_HOME% \ SBIN;% CYGWIN_HOME% \ USR \ Bin;% CYGWIN_HOME% \ USR \ SBIN;% CYGWIN_HOME% \ USR \ Local \ Bin;% CYGWIN_HOME% \ USR \ Local \ SBIN

Закройте командную строку, затем снова откройте ее. Двоичные файлы Cygwin теперь должны быть доступны. Вы можете проверить это еще раз, набрав «which bash». Он должен сообщить местоположение вашего исполняемого файла bash.

11 голосов
/ 29 июля 2009

FWIW, у Cygwin cron .

Вы называете свой сценарий так?

bash --login -i ./myscript.sh
10 голосов
/ 29 июля 2009

Поместите каталог cygwin bin (вероятно, C:\cygwin\bin) в переменную среды PATH.

Это также даст вам возможность использовать такие команды, как tar, ls, rm и т. Д. Из обычных окон консоли, а не только из консоли Cygwin.

2 голосов
/ 29 июля 2009

Если этот сценарий вызывается из командной оболочки Windows, первая строка приведет к ошибке, поскольку #!/bin/bash не является распознанной командой Windows, а # не является допустимым разделителем комментариев в пакетном файле.

Итак, суть в том, что этот скрипт запускается как обычный пакетный файл, а не изнутри Cygwin. Как отмечено matt b, у вас, вероятно, нет пути к исполняемому файлу Cygwin в переменной среды PATH. Без этого командный файл не может найти утилиты Cygwin (tar и date).

0 голосов
/ 07 октября 2015

У меня только что была эта проблема.

Редактирование переменной среды прекрасно работает. Но если у вас нет прав администратора, вы не сможете этого сделать. В этом случае вы можете выполнять свои команды, используя абсолютный путь, например:

/usr/bin/tar cvzf $filename
/usr/bin/cat $filename

Если вы это сделаете, ваш bash-скрипт работает, даже если вы вызываете его из командного файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...