#bash #cron
#bash #cron
Вопрос:
Мне нужно установить новый crontab
, который запускает скрипт каждые 2 минуты. Для этого я должен записать в crontab
файл следующее:
*/2 * * * * cd /myDirectory/ amp;amp; ./myScript.sh
Мне нужно установить эту crontab
команду программно, используя то же myScript.sh
самое. Я пытался сделать это так:
crontab -l > ./currentcron #save current crontab in file
echo ${FULL_CRONTAB} >> ./currentcron #append my command
crontab ./currentcron #install new file
rm ./currentcron #remove temporary file
Логика работает, но проблема в моей FULL_CRONTAB
переменной. Я попытался определить его следующим образом:
FULL_CRONTAB="*/2 * * * * cd ${APPLICATION_DIRECTORY}/ amp;amp; ./myScript.sh"
… но строка расширяется из "
-за того, что переменная so фактически получает полный список файлов в папке вместо моей целевой строки, которую я должен добавить в свою crontab.
Вместо этого я пытался использовать одинарные кавычки ( '
), но ничего не меняется.
Я также пытался избежать *
(например FULL_CRONTAB="*/2 * * * * cd ${APPLICATION_DIRECTORY}/ amp;amp; ./myScript.sh"
), но переменная содержит
, а не только *
, поэтому ее нельзя использовать.
Похоже на основной вопрос, но я не выхожу из этого: как я могу получить свое FULL_CRONTAB
определение, зная, что я должен интерпретировать ${APPLICATION_DIRECTORY}
, но что я не хочу интерпретировать *
, чтобы моей целью была команда ниже?
*/2 * * * * cd /myDirectory/ amp;amp; ./myScript.sh
Вариант использования будет:
bash$ APPLICATION_DIRECTORY="/myDirectory"
bash$ FULL_CRONTAB="*/2 * * * * cd ${APPLICATION_DIRECTORY}/ amp;amp; ./myScript.sh"
bash$ echo ${FULL_CRONTAB}
На моем терминале третья команда выше выводит что-то вроде этого:
*/2 -ltr (...list of all the files and folders in the current directory...) cd /myDirectory/ amp;amp; ./myScript.sh
Комментарии:
1. @Aaron как я уже сказал в своем вопросе, я попробовал оба ваших предложения, и ни одно из них не работает, подстановочный знак по-прежнему расширяется.
2. Извините, я ответил слишком быстро. Вам нужны кавычки в аргументе вашего второго echo; смотрите Здесь
3. @Aaron true, большое спасибо 🙂
Ответ №1:
При его использовании вам нужно будет заключить вашу FULL_CRONTAB
переменную в двойные кавычки, как показано ниже, чтобы предотвратить глобализацию :
"$FULL_CRONTAB"