语法错误:反引号替换中的 EOF

语法错误:反引号替换中的 EOF

我安排了以下 cron 作业:

root@alexus:~# crontab -l | grep ^\@hourly
@hourly     OUT=`/usr/lib/nagios/plugins/check_disk --include-type=ext4 --warning=10% --critical=5%` ; if [ $? != 0 ] ; then echo $OUT ; fi
root@alexus:~# OUT=`/usr/lib/nagios/plugins/check_disk --include-type=ext4 --warning=10% --critical=5%` ; if [ $? != 0 ] ; then echo $OUT ; fi
root@alexus:~# cat /etc/issue.net 
Ubuntu 14.04.3 LTS
root@alexus:~# 

尽管我可以跑确切地shell 中同样的一行程序,每当通过 cron 执行作业时,我都会收到以下电子邮件:

主题:Cron OUT=`/usr/lib/nagios/plugins/check_disk --include-type=ext4 --warning=10 /bin/sh: 1:语法错误:反引号替换中的 EOF

根据主题行,似乎%标志后的所有内容都缺失了。

我该如何正确地摆脱它而不破坏我的脚本?

答案1

您需要检查crontab(5)手册页。cron 的一些实现将%使用新队在命令字段中,这样你就可以通过 stdin 将数据传递给命令

* * * * * >$HOME/cron.cat.out cat%hello%world

然后“cron.cat.out”包含2行:

hello
world

你需要

  • 逃避百分号
  • 我建议使用$()而不是反引号
  • 引用"$OUT"——始终引用你的变量除非您需要不引用它们的特定副作用。
@hourly     OUT=$(/usr/lib/nagios/plugins/check_disk --include-type=ext4 --warning=10\% --critical=5\%) || echo "$OUT"
# ...................................................................................^..............^

相关内容