mysql - 从 bash 运行 mysql 查询;其中查询存储在单独的文件中,并在 bash 中设置/变量

标签 mysql bash

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

最佳答案

使用 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

关于mysql - 从 bash 运行 mysql 查询;其中查询存储在单独的文件中,并在 bash 中设置/变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13404428/

相关文章:

mysql - SQL 从另一行中减去查询行

mysql - 损坏的 MySQL 表 - "Can' t 查找文件“错误;有什么方法可以恢复丢失的 .myd 和 .myi 文件?

mysql - 在入口点脚本中执行后如何清理临时文件?

bash - 在公共(public)列上合并两个文件并使用 awk 打印所有列

arrays - 使用 awk 解析文本文件的各个部分

php - 当MySQL列为1时显示文本

php - 组合 3 个 select 语句并按时间戳排序

linux - 如何使用 gnu cp 命令将文件复制到多个目录

linux - Bash 在多台服务器上运行 rsh

bash - 是否可以使用 "set -e"但允许某些命令失败?