スクリプトは機能しませんが、コマンドはスクリプトの外部で動作します。

スクリプトは機能しませんが、コマンドはスクリプトの外部で動作します。

デフォルトでは、コマンドを実行してからユーザーにレポートを電子メールで送信する非常に簡単なスクリプトがあります。

#!/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

スクリプトは一重引用符をエスケープしています。これはシェルがそれを解釈しないことを意味します。これは単に日付ではなくpt-query-digestリテラル文字列を取得することを意味します。おそらく一重引用符を処理する方法がわからないようです。'2015-10-21'2015-10-21pt-query-digest

エスケープされた一重引用符を削除し、--since=\'$FROMDATE\'二重引用符のみを使用してください。この行では、両方の用途を修正する必要があります。

関連情報