为什么我不能使用“\”在 crontab 中继续一行?

为什么我不能使用“\”在 crontab 中继续一行?

acme-client(1) 手册页建议使用以下 cron 条目:

~   *   *   *   *   acme-client example.com && \
    rcctl reload httpd

当我添加到crontab编辑时,当我使用该语法时不会保存:

crontab: installing new crontab
"/tmp/crontab.nOryzjBTlv":22: bad minute
crontab: errors in crontab file, unable to install
Do you want to retry the same edit? 

但如果我只用一行就可以节省很多:

~   *   *   *   *   acme-client example.com && \ rcctl reload httpd

为什么不允许\将一行继续到下一行?

答案1

无法将单个命令行拆分为多行,例如 shell 的尾部“\”

如果您这样做,您将在下一段中找到上述声明man 5 crontab。请注意以下内容来自 Ubuntu 20.04LTS。

“第六”字段(该行的其余部分)指定要运行的命令。该行的整个命令部分(直到换行符或 % 字符)将由 /bin/sh 或 crontab 文件的 SHELL 变量中指定的 shell 执行。命令中的百分号 (%),除非用反斜杠 (\) 转义,否则将更改为换行符,并且第一个 % 之后的所有数据都将作为标准输入发送到命令。无法将单个命令行拆分为多行,例如 shell 的尾部“\”

https://man.openbsd.org/crontab.5
它说该行的其余部分是命令字段,它没有说明命令如何跨多行。您不应假设 crontab 与 shell 脚本具有相同的语法。

命令字段(该行的其余部分) 是要运行的命令。该行的整个命令部分(直到换行符或 % 字符)将由 /bin/sh 或 crontab 的 SHELL 变量中指定的 shell 执行。命令中的百分号('%'),除非用反斜杠('\')转义,否则将被更改为换行符,并且第一个'%'之后的所有数据将作为标准输入发送到命令。

相关内容