【问题标题】:Get columns name and write it into a file获取列名并将其写入文件
【发布时间】:2018-01-21 10:00:09
【问题描述】:

大家好,我编写了一个执行查询 e 并将结果打印到文件中的 bash 脚本,但它不起作用

source ../db.config
msqlcmd="mysql -u $DB_USER -p$DB_PASS -s -B -q"
echo "USE INFORMATION_SCHEMA;\nSELECT * FROM COLUMNS" | $mysqlcmd > ../tmpsql/columns.txt

在 db.config 中有访问 db 的凭据

【问题讨论】:

  • 但它不起作用是什么意思?你能显示预期的输出和你的输出吗?
  • 我没有在控制台中得到任何输出。我希望它使用查询结果创建一个文件,它创建文件,但不打印任何结果
  • 不要将命令放在变量中。
  • @Cyrus 说得好!需要注意的一点。

标签: mysql sql bash


【解决方案1】:

您无需重新发明轮子即可获得 mysql 登录凭据。使用mysql_config_editor 将您的凭据加密存储在 ~/.mylogin.cnf 中,然后您可以在一个简单的单行中完成整个操作,例如

mysql -s -B -q -e "select * from information_schema.columns" | tee ./tmpsql/columns.txt 

【讨论】:

    【解决方案2】:

    试试下面的代码:

    source ../db.config
    echo -e "USE INFORMATION_SCHEMA;\nSELECT * FROM COLUMNS" | mysql -u $DB_USER -p$DB_PASS -s -B -q > ../tmpsql/columns.txt
    

    【讨论】:

    • 你不需要-e 选项和echo 来解释\n 吗?
    • 那个eval 是个可疑的朋友。我建议不要去那里。 :-/
    • 删除它;-) 让我们保持简单和愚蠢(和工作呵呵)谢谢
    • 嗯.. 在评论中提到赛勒斯comment 已经解决了他的问题的问题。我想知道他是如何在没有-e 标志的情况下让它工作的。他可能是一个操作系统,其中解释反斜杠可能是默认行为。
    【解决方案3】:

    不要将命令放在变量中,因为[ this ] 的回答很好地总结了。

    [ heredoc ] 是你的朋友。

    mysql -u "$db_user" -p "$db_pass" -s -B -q <<-EOF > ../tmpsql/columns.txt
    USE INFORMATION_SCHEMA;
    SELECT * FROM COLUMNS;
    EOF
    

    一切顺利:-)


    注意:不要对用户定义的变量使用完整的大写标识符,例如$DB_USER,因为它可能与内置的 shell 变量冲突。双引号变量也是一种标准做法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-17
      • 1970-01-01
      • 2018-08-09
      • 2014-12-10
      • 2019-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多