mysql - 如何让 bash 将命令的一部分解释为 MySQL 命令

标签 mysql linux bash shell

我想编写一个包含一些 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 中。即

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 - 如何让 bash 将命令的一部分解释为 MySQL 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23431442/

相关文章:

linux - 如何使用 bash 根据模式列出 Linux 中的文件

linux - 历史扩展中的单引号(bash)

mysql - 合并单个表中的行显示重复结果

linux - 如何正确配置 ssh proxycommand 以运行 docker exec?

linux - 如何在 Elastix 模块中包含 javascript

linux - 在将文件发送到管道之前在文件的顶部和底部添加行

mysql - 从扳机体内放下扳机

MySql搜索与正则表达式至少匹配2个子字符串的字符串

mysql - 如何将查询结果设置为可查询表?

java - 从 Java 调用 curl 命令