Syntax error: EOF in backquote substitution

ale*_*xus 3 bash cron

I scheduled following cron job:

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:~# 
Run Code Online (Sandbox Code Playgroud)

and even though I'm able to run EXACTLY same one liner within shell, whenever job gets executed via cron, I get following email:

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

每个主题行,似乎%符号后的所有内容都丢失了。

如何在不破坏脚本的情况下正确转义它?

gle*_*man 7

你需要检查你的crontab(5)手册页。cron 的一些实现将%用作命令字段中的换行符,因此您可以将数据传递给 stdin 上的命令

* * * * * >$HOME/cron.cat.out cat%hello%world
Run Code Online (Sandbox Code Playgroud)

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

hello
world
Run Code Online (Sandbox Code Playgroud)

你需要

@hourly     OUT=$(/usr/lib/nagios/plugins/check_disk --include-type=ext4 --warning=10\% --critical=5\%) || echo "$OUT"
# ...................................................................................^..............^
Run Code Online (Sandbox Code Playgroud)