Как легко и элегантно передать переменные среды из .bashrc в задачу cron?
Я читал много примеров, но мне кажется, что это как-то не работает. Почему я не могу выполнить задачу cron с загруженными переменными среды из .bashrc или .bashprofile в оболочка bash? Я смог добиться успеха только с помощью ш оболочка. Протестировано на 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**
Я пробовал гораздо больше, и я вроде ничего не могу сделать, чтобы просто элегантно использовать (без написания рукописного 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)" - супер уродливый и сложный способ его обойти
Кроме того, нет необходимости писать */1, но достаточно *.
И да, [ -z "$PS1" ] && return - не лучший вариант. Может взглянуть на mywiki.wooledge.org/DotFiles
@kvantour Я запускаю все под root (внутри моего контейнера докеров). Все редактируется под crontab пользователя). Просто напишите crontab -e





От имени какого пользователя вы используете этот cron? Кроме того, это файл cronjob пользователя,
/etc/crontabили/etc/cron.d?