首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在cron中转义字符

在cron中转义字符
EN

Server Fault用户
提问于 2012-03-09 12:05:38
回答 3查看 7.8K关注 0票数 10

以下操作与命令提示符预期的一样。但它不适用于cron。

代码语言:javascript
复制
mysqldumpslow <(tail -1000 `mysqladmin variables \
    | grep slow_query_log_file | awk '{print $4}'`) \
    | mail -s "slow log from `hostname` sorted by time" amar`hostname`@gmail.com \
    > /root/slow_succ.txt 2> /root/slow_err.txt

我得到以下错误:

代码语言:javascript
复制
/bin/sh: -c: line 0: syntax error near unexpected token `('

某些字符需要在cron中转义吗?或者是cron中的subshell问题?

EN

回答 3

Server Fault用户

回答已采纳

发布于 2012-03-09 12:11:43

我将详细介绍SvenW说的话,指出我将把这个命令放入脚本中,原因有两个:

  1. 它避免了在crontab中转义字符的任何问题。
  2. 它允许您清楚地向您的同事管理员指出该工作所做的,而不浪费他们的任何周期,解密您创建的一行魔法。例如调用脚本/root/bin/dump_mysql_tables_and_email_failure_report.sh。您可能不在一个与其他管理员一起的环境中,但这将有助于提醒您,一年后您到底在想什么!:)
票数 14
EN

Server Fault用户

发布于 2012-03-09 12:08:27

对于cron转义问题,最简单的解决方案是:将命令放入自己的shell脚本中,然后从cron调用这个脚本。

票数 5
EN

Server Fault用户

发布于 2012-03-09 12:17:24

它不能工作的原因是cron不是bash。使用括号创建子subshell是bash语法的一部分。这方面的线索在错误信息的第一个“单词”中。

Backticks可以创建一个子subshell,但您已经在您的子subshell中使用backticks了,所以您不能再使用它了。

正如其他人已经说过的,编写一个脚本并从cron调用它。

票数 5
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/368009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档