Shell
腳本不起作用,但命令在腳本之外起作用
我有一個非常簡單的腳本,它基本上執行一個命令,然後將報告通過電子郵件發送給使用者:
#!/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\'
而只使用雙引號。確保修改該行中的兩種用法。