Как легко и элегантно передать переменные окружения из .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)"
супер уродливый и сложный способ обойти его