Пользователь 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
не распознан в контексте крона.
Имеет место это? Если так, где псевдоним в масштабе всей системы для .
определенный?
Имеет место это? Если так, где псевдоним в масштабе всей системы для
.
определенный?
Это имеет место, но нет такой вещи как псевдоним в масштабе всей системы.
.
и 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.