我有一个bash脚本负责查询数据库并将结果传递给文件:
date=`date +"%Y/%m/%d"`
/usr/bin/mysql -u $db_user -p$db_pass -h $db_name $db_schema << MYSQLEOF > $output_file
select *
from table
where date = $date
MYSQLEOF
现在将这个项目扩展到其他领域,为了重用性/正交性,我想把查询放在它自己的文件中并调用类似的东西:
cmd=`echo $sql_file`
/usr/bin/mysql -u $db_user -p$db_pass -h $db_name $db_schema -e "$cmd" > $output_file
sql文件:
select *
from table
where date = $date
我无法找到我可以(在bash中)这样做,同时仍然能够在sql文件中拥有和调整变量($ date)。将.sql文件回放到bash变量中,我无法将“$ date”作为文字字符串。
bash中是否有解决方案,或者我应该研究像perl这样的东西来处理这个问题?
答案 0 :(得分:1)
使用mySQL CLI的source
命令。
queryfile=my_query.sql
/usr/bin/mysql -u $db_user -p$db_pass -h $db_name $db_schema -e "source $queryfile" > $output_file
答案 1 :(得分:1)
我找到了一个使用命令行Perl进行搜索/替换的解决方案。
Bash脚本:
date=`date +"%Y/%m/%d"`
export date
cmd=`perl -lpe 's/DATE_VAR/$ENV{date}/g' "$sql_file"`
/usr/bin/mysql -u $db_user -p$db_pass -h $db_name $db_schema -e "$cmd" > $output_file
和sql_file:
select *
from table
where date = 'DATE_VAR'