Cron 作业 * 被当前目录中的文件名替换

Cron 作业 * 被当前目录中的文件名替换

这是我的第一个 shell 脚本程序,所以我认为这对你们来说更可能是一个愚蠢的问题。

问题概述 我的需要是编写一个 shell 命令来安装 Node.js 服务器。

  • 服务器需要安装 3 个 crons 作为依赖项。我们提供 3 种不同的环境。

问题 因此,当我尝试将 cron(string) 分配给变量时,字符串中的所有星号都会被当前工作目录中的文件名替换。

VAR1="*/1       *       *       *       *      /usr/bin/wget -O /var/tmp/output-folder-path  https://my.server.com:12000/cron/push >> /dev/null 2>&1"

现在,当我echo $VAR1这样做时,输出如下

*/3 file1.txt file2.txt generated.txt sample.sh file1.txt file2.txt generated.txt sample.sh file1.txt file2.txt generated.txt sample.sh file1.txt file2.txt generated.txt sample.sh /usr/bin/wget -O /var/tmp/output-folder-here https://my.server.com:12000/cron/push >> /dev/null 2>&1

ls该目录中命令的输出是

file1.txt  file2.txt  generated.txt  sample.sh

答案1

您需要在 * 前面放置一个退格键,这样它就不会用作通配符。

VAR1="\*/1       \*       \*       \*       \*      /usr/bin/wget -O /var/tmp/output-folder-path  https://my.server.com:12000/cron/push >> /dev/null 2>&1"

编辑

我错了。当您像我上面发布的那样执行操作时, * 不会转义。而是使用单引号。

VAR1='*/1       *       *       *       *      /usr/bin/wget -O /var/tmp/output-folder-path  https://my.server.com:12000/cron/push >> /dev/null 2>&1'

此外,如果您不想使用单引号,则可以在打印时引用该变量。

echo "$VAR1"

顺便说一句,我认为我不会在 shell 脚本中嵌入 cron 命令。我看起来这不是一个好的做法,除非您计划使用脚本更新 crontab,否则它不会起作用。

相关内容