在cron中转义哈希(#)

时间:2018-11-13 13:02:59

标签: cron escaping

以下行在cron中起作用:

* * * * * /usr/bin/mosquitto_pub -h  test.mosquitto.org -p 1883 -u dragino -t /MyExample/Topic -m "GPING-GPING-4-GPING-GPING"

这不是:

* * * * * /usr/bin/mosquitto_pub -h  test.mosquitto.org -p 1883 -u dragino -t /MyExample/Topic -m "GPING#GPING#4#GPING#GPING"

通知我将消息中的-字符更改为#。我知道#字符需要转义,但是如何? \#无效。

2 个答案:

答案 0 :(得分:0)

用\转义所有#,因为#表示bash脚本中的注释,例如cron run。
\#应该允许脚本运行。

答案 1 :(得分:0)

此说法有误:

  

空白行,前导空格和制表符将被忽略。第一个非空白字符为#)的行是注释,不会被处理。 请注意,注释不能与cron命令放在同一行,因为它们被视为命令的一部分。类似地,注释也不能与环境变量设置在同一行。

     

来源:man 5 crontab

您可以使用以下方法轻松进行测试:

* * * * * echo "#" > ~/foo.txt

您的问题很可能与mosquitto_pub有关。尽管本主题没有讲过,但是看来您的消息中只能有一个#,应该在结尾。

另一种解决方案是创建脚本/path/to/run_cronscript.sh,其中包含:

#!/usr/bin/env bash

/usr/bin/mosquitto_pub -h  test.mosquitto.org -p 1883 -u dragino -t /MyExample/Topic -m "GPING#GPING#4#GPING#GPING"

,然后将您的crontab调整为:

* * * * * /path/to/run_cronscript.sh