Shell

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

  • October 28, 2015

我有一個非常簡單的腳本,它基本上執行一個命令,然後將報告通過電子郵件發送給使用者:

#!/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="blah@blah.com"



$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.

所以看起來它可能是單引號的東西?我不知道。任何幫助將不勝感激。

您正在轉義腳本中的單引號,這意味著它們不會被 shell 解釋。這意味著pt-query-digest獲取文字字元串'2015-10-21'而不僅僅是日期,2015-10-21. pt-query-digest大概不知道如何處理單引號。

您應該擺脫轉義的單引號,--since=\'$FROMDATE\'而只使用雙引號。確保修改該行中的兩種用法。

引用自:https://unix.stackexchange.com/questions/239349