Определение задания crontab, содержащего подстановочные знаки (*), без их расширения

#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"