O script não está funcionando, mas o comando funciona fora do script

1

Eu tenho um script muito simples que basicamente executa um comando e envia o relatório por e-mail para um usuário:

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

Tudo funciona perfeitamente quando eu executo isso manualmente (abaixo)

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

E se eu fizer eco da linha no script:

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

Quando executo o script, recebo um erro

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

Então parece que pode ser algo com aspas simples? Não tenho certeza. Qualquer ajuda seria muito apreciada.

    
por Fr0ntSight 28.10.2015 / 23:51

1 resposta

4

Você está escapando das aspas simples no script, o que significa que elas não são interpretadas pelo shell. Isso significa que pt-query-digest obtém a string literal '2015-10-21' em vez de apenas a data, 2015-10-21 . pt-query-digest presumivelmente não sabe o que fazer com as aspas simples.

Você deve se livrar das aspas simples com escape em --since=\'$FROMDATE\' e apenas usar aspas duplas. Certifique-se de modificar os dois usos nessa linha.

    
por 28.10.2015 / 23:57