【问题标题】:How to have bash interpret part of the command as MySQL commands如何让 bash 将部分命令解释为 MySQL 命令
【发布时间】:2014-05-02 15:14:20
【问题描述】:

我想编写一个包含一些 MySQL 语句的 bash 脚本。

#!/bin/bash
mysql -u root --password=passwd
CREATE DATABASE test
GRANT ALL PRIVILEGES ON test.* TO 'testuser'@'localhost' \
IDENTIFIED BY 'passwd';

当我运行 db.sh 时出现以下错误:bash CREATE:command not found.

我尝试了以下方法也没有运气:

#!/bin/bash
cat << EOF | mysql -u root --password=passwd
CREATE DATABASE test;
GRANT ALL PRIVILEGES ON test.* TO 'testuser'@'localhost' \
IDENTIFIED BY 'passwd';
EOF

有没有办法让 bash 知道mysql -u root --password=passwd 后面的命令是 MySQL 命令而不是 bash 命令?

【问题讨论】:

  • 您的第二个示例对我来说效果很好,您是遇到错误还是什么?

标签: mysql linux bash shell


【解决方案1】:

将命令放入一个文件中,然后通过管道将其输入 mysql。即

mysql -u root --password=passwd < file_with_commands.sql

或者,使用 EOF:

mysql -u root --password=passwd << EOF
<comands>...

编辑:根据您的评论,试试这个(全部在一行上):

mysql -u root --password=passwd -e "CREATE DATABASE test; GRANT ALL PRIVILEGES ON test.* TO 'testuser'@'localhost' IDENTIFIED BY 'passwd';"

【讨论】:

  • 谢谢!我的问题是我必须在一个字符串中指定整个命令,该字符串将传递给其他程序。如果我运行 "mysql -u root --passowrd=passwd
  • 谢谢dwjv。我现在收到以下错误:第 1 行的错误 1064 (42000):您的 SQL 语法有错误:检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 passwd 附近使用正确的语法。
  • &lt;&lt;EOF 语法被称为“此处文档”。标记可以是任何单词,而不仅仅是“EOF”。
  • 不知道该说什么,这些命令对我有用。你一定在做一些不同的事情。我刚刚在我的本地机器上尝试了 mysql-e "CREATE ..." 并且成功了。
猜你喜欢
  • 1970-01-01
  • 2011-01-25
  • 2023-03-21
  • 2017-07-06
  • 2012-02-14
  • 2012-11-21
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
相关资源
最近更新 更多