'источник', встроенный в ударе, не распознанном в среде крона

Пользователь crontab запись, которая читает:

0 */4 * * * $HOME/postscript/fprogcache-sync

хорошо работает. Желая добавить несколько переменных среды к контексту задания крона, я затем попробовал

0 */4 * * * source $HOME/.profile; $HOME/postscript/fprogcache-sync

Это не работало, пока я не изменился source для .. Сообщение об ошибке (отправленный постфиксной почтой для укоренения) было /bin/sh: 1: source: not found, сопровождаемый подтверждением, что сценарий продолжал выполняться счастливо.

Я помню считавший где-нибудь это source определяется как псевдоним встроенного . в оболочке удара. Если так, это объяснило бы почему source не распознан в контексте крона.

Имеет место это? Если так, где псевдоним в масштабе всей системы для . определенный?

2
задан 28 March 2016 в 23:46

1 ответ

Имеет место это? Если так, где псевдоним в масштабе всей системы для . определенный?

Это имеет место, но нет такой вещи как псевдоним в масштабе всей системы.

. и source то же, встроенное в Bash, но это определяется непосредственно на уровне исходного кода (https://askubuntu.com/a/25491/380067).

Причина позади наличия двух названий того же, встроенного наиболее вероятный, находится в том, что Bash имеет целью быть совместимым POSIX в некоторой степени; так source ради обеспечения мнемонического имени и . ради исполнения стандартов POSIX.

Настоящая причина, почему source не работает в cron это по умолчанию cron задания в crontab являются excuted в sh, который является символьной ссылкой на /bin/dash (оболочка, которая имеет целью быть совместимой POSIX также), который просто не реализует source. Однако это действительно реализует ..

От man dash:

. file
       The commands in the specified file are read and executed by the
       shell.
6
ответ дан 2 December 2019 в 01:44

Другие вопросы по тегам:

Похожие вопросы: