2

我有一个 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 之类的东西来处理这个问题?

4

2 回答 2

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
于 2012-11-15T19:25:32.610 回答
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'
于 2012-11-15T20:50:08.333 回答