Конструкция ${variable-alternate value}
использует альтернативное значение, если переменная установлена, но не если для нее задана пустая строка (, то есть пустая ). Если вы хотите использовать альтернативное значение, если переменная не установлена ИЛИ установлена в пустую строку, используйте ${variable:-alternate value}
(, обратите внимание на двоеточие )вместо:
local v="${name:-$tag}"
Вот мой шаблонный cron
ответ, надеюсь, что-то из этого поможет.
Задания, выполняемые через cron
, или at
, или batch
, не выполняются в той же среде выполнения, что и на вашем рабочем столе. Ни одно из ваших изменений PATH
или других настроек переменных среды не распространяется автоматически на ваше задание cron
. Например, $DISPLAY
нет, поэтому программы с графическим интерфейсом требуют специальной обработки (читатьman xhost
).
Можно установить переменные среды для всех своих cron
заданий в файле crontab
. Прочтите man 5 crontab
.
Посмотрите на результаты echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias
в каждой из ваших сред.
Поскольку часть command
строки crontab
по умолчанию интерпретируется синтаксис /bin/sh
, который имеет более простой синтаксис, чем /bin/bash
, я рекомендую, чтобы command
был вызовом bash
скрипт (исполняемый, смонтированный, начинается с 7 #!/bin/bash
), который настраивает среду, затем вызывает нужную программу.