我尝试构建一个转储旧Sql-Data的脚本,但它不起作用。
这是我到目前为止提出的脚本:
#!/bin/bash
MAX_AGE="-3 months"
DB="anyDb"
TABLE="logs"
USER="user"
PASS="pass"
# Get date
MAX_DATE=$(date -d "${MAX_AGE}" +"%Y-%m-%d")
# set Options
OPTIONS="--compact --extended-insert --where=\"created_at < '${MAX_DATE} 00:00:00'\""
mysqldump -u $USER -p$PASS $OPTIONS $DB $TABLE > someOldData.sql
问题是,当我在shell中输入结果命令但是在运行脚本时,它可以正常工作,它会给我以下错误:
Access denied for user 'user'@'localhost' to database '<' when selecting the database
我的命令的where-statement的转义有什么问题吗?
答案 0 :(得分:1)
扩展时,不会处理shell变量中的引号。使用shell数组而不是单个字符串:
OPTIONS=(--compact --extended --where="created_at < '${MAX_DATE} 00:00:00'")
mysqldump -u $USER -p$PASS "${OPTIONS[@]}" $DB $TABLE > someOldData.sql