Задача Cron с чтением .bashrc в Ubuntu - PullRequest
0 голосов
/ 07 сентября 2018

Как легко и элегантно передать переменные окружения из .bashrc в задачу cron?

Я прочитал много примеров, но, похоже, у меня это не работает. Почему я не могу выполнить задачу cron с загруженными переменными среды из .bashrc или .bashprofile в оболочке bash ? Я смог добиться успеха только при использовании sh shell . Протестировано на 2 Ubuntu 18.04.1 LTS Bionic и Ubuntu 16.04.5 LTS xenial.

MAILTO=root HOME=/
BASH_ENV=/root/.bashrc

SHELL=/bin/bash
*/1 * * * * . $BASH_ENV; echo $EDITOR > /var/log/supervisor/out.log 2>&1 --> **Doesn't work**

SHELL=/bin/sh
*/1 * * * * . $BASH_ENV; echo $EDITOR > /var/log/supervisor/out.log 2>&1 --> **WORKS**

SHELL=/bin/sh
*/1 * * * * source $BASH_ENV; echo $EDITOR > /var/log/supervisor/out.log 2>&1 --> **Doesn't work**

SHELL=/bin/sh
BASH_ENV=/root/.my_env
*/1 * * * * echo $EDITOR > /var/log/supervisor/out.log 2>&1 --> **WORKS**

Я попробовал гораздо больше, и я ничего не могу поделать, чтобы просто иметь возможность элегантно использовать (без написания от руки made sctipt с источником .bashrc). Лучший ответ - просто использовать BASH_ENV на .bashrc, но он работает только с моими рукописными файлами env.

Также я нашел строку в .bashrc , в которой говорится. Возможно, это как-то конфликтует и не читает .bashrc в оболочке bash. Но почему это работает с sh shel?

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

Это остановит оценку файла, если он запущен в неинтерактивной оболочке

Возможно, люди, которые смогли легко выполнить .bashrc, использовали не дистрибутивы Ubuntu.

Я обнаружил, что ответ Стефанмарика был полезен в случае с Ubuntu, но eval "$(cat ~/.bashrc | tail -n +10)" супер уродливый и сложный способ обойти его

...