定义不包含通配符(*)的crontab作业

时间:2019-04-12 13:26:23

标签: bash cron

我需要安装一个新的crontab,它每2分钟运行一次脚本。 为此,我应该在crontab文件中编写以下内容:

*/2 * * * * cd /myDirectory/ && ./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}/ && ./myScript.sh"

...但是由于"导致字符串被扩展,因此变量实际上获得了文件夹中文件的完整列表,而不是我应添加到crontab中的目标字符串。

我尝试改用单引号('),但没有任何变化。

我也尝试转义*(例如FULL_CRONTAB="\*/2 \* \* \* \* cd ${APPLICATION_DIRECTORY}/ && ./myScript.sh"),但是变量包含\而不只是*,因此它不可用。

感觉像一个基本问题,但我不是从这个问题出来的:我知道我必须解释FULL_CRONTAB,但又不想解释${APPLICATION_DIRECTORY}的定义,解释*,以便我的目标是下面的命令?

*/2 * * * * cd /myDirectory/ && ./myScript.sh

用例为:

bash$ APPLICATION_DIRECTORY="/myDirectory"
bash$ FULL_CRONTAB="*/2 * * * * cd ${APPLICATION_DIRECTORY}/ && ./myScript.sh"
bash$ echo ${FULL_CRONTAB}

在我的终端上,上面的第三条命令输出如下内容:

*/2 -ltr (...list of all the files and folders in the current directory...) cd /myDirectory/ && ./myScript.sh

1 个答案:

答案 0 :(得分:1)

在使用FULL_CRONTAB变量时,您需要将其用双引号括起来,以防止出现问题:

"$FULL_CRONTAB"