脚本不起作用,但命令在脚本之外起作用

脚本不起作用,但命令在脚本之外起作用

我有一个非常简单的脚本,基本上运行一个命令,然后将报告通过电子邮件发送给用户:

#!/bin/bash

FROMDATE=`date -d "last week 13:00 " '+%Y-%m-%d'`
TODATE=`date '+%Y-%m-%d'`
SLOWLOG='/var/log/mysql/slow-queries.log'
REPORT='/home/user/slow.log.'$TODATE
PTQUERY='/usr/bin/pt-query-digest'
SUBJECT="Slow Query Report -- $TODATE"
EMAIL="[email protected]"



$PTQUERY --since=\'$FROMDATE\' --until=\'$TODATE\' $SLOWLOG > $REPORT


/usr/bin/mutt -s "$SUBJECT" "$EMAIL" < $REPORT

当我手动运行时一切都很完美(如下)

/usr/bin/pt-query-digest --since='2015-10-21' --until='2015-10-28' /var/log/mysql/slow-queries.log > /home/user/slow.log

如果我回显脚本中的行:

/usr/bin/pt-query-digest --since='2015-10-21' --until='2015-10-28' /var/log/mysql/slow-queries.log

当我运行脚本时出现错误

Invalid --since value at /usr/bin/pt-query-digest line 13562.

所以看起来它可能是带有单引号的东西?我不知道。任何帮助将不胜感激。

答案1

您正在转义脚本中的单引号,这意味着 shell 不会解释它们。这意味着pt-query-digest获取文字字符串'2015-10-21'而不仅仅是日期2015-10-21pt-query-digest大概不知道如何处理单引号。

您应该去掉转义的单引号--since=\'$FROMDATE\',而只使用双引号。确保修改该行中的两种用途。

相关内容