1

Я написал небольшую утилиту для haXe + Neko, которая должна выполнять некоторые команды GIT. Чтобы избежать жесткого кодирования пути к исполняемому файлу GIT, я хотел бы использовать команду which, чтобы выяснить, где он находится. Все работает, как и ожидалось, при запуске вручную из консоли, но не тогда, когда приложение запускается по заданию cron.

Я знаю об ограниченной среде (здесь или здесь), когда вы запускаете скрипт с использованием cron, но все же удивлен, что это не работает:

/usr/bin/which git >> /home/user/git.txt

Текстовый файл создан, но содержимое пусто. Опять же, при запуске из консоли все работает как положено.

Есть идеи? Я использую OS X Leopard, если это поможет.

Спасибо : )

Juan

3 ответа3

3

Если «which» может найти исполняемый файл, то и интерпретатор оболочки, выполняющий вашу команду cron, также может это сделать. Так что я не понимаю, почему вы хотите использовать «что» для этой цели. Но, может быть, у вас есть причина, которая не очевидна.

Команда 'which' использует каталоги, перечисленные в $ PATH, для поиска 1-го вхождения команды. Очень вероятно, что PATH не соответствует тому, что вы думаете. Попробуйте добавить '/usr/bin/env >> /home/user/you/env.txt' в ваш crontab, чтобы запустить его сегодня, через одну минуту. Затем загляните в /home/user/you/env.txt, чтобы увидеть, на что был установлен PATH. Если этот PATH не подходит для ваших целей, вам, возможно, придется поместить все свои команды в небольшой скрипт оболочки, где вы можете установить PATH самостоятельно. Вы также можете посмотреть в этом файле env.txt другие экспортированные переменные окружения, поскольку это может пригодиться в зависимости от того, что вы хотите сделать через crontab.

2

Где на самом деле находится git (то есть, если вы запустите /usr/bin/which git из консоли, что он печатает)? Если он не находится в каталоге в $ PATH (это просто /usr /bin и /bin на моей машине со Snow Leopard), /usr/bin/which не найдет его, и вам нужно либо жестко закодировать его, либо добавить строку лайк

PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

в файл crontab.

0

Будет ли это сделать трюк?

/usr/bin/env  git

Команда env заботится о поиске команды и сама всегда находится в /usr /bin (поэтому мне сказали ...) Это распространенная уловка в скриптах Python, необходимая из-за того, что разные дистрибутивы помещают питон в разные места, но никто не хочет возиться, пытаясь найти где.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .