我想执行一个 mysql 脚本,要求用户从命令行动态输入密码,如果可能的话,还附带一条消息Enter your $root password
。但是它不能按预期工作。到目前为止,我已经
mysql -u root -p CREATE DATABASE IF NOT EXISTS Test
此外,创建数据库时如何从 mysql 注销并返回到 bash 命令?
答案1
根据文档
mysql -u root -p --execute="SELECT User, Host FROM mysql.user"
提示输入密码,执行给定的命令,并返回到 shell(无需注销)。
如果您想要自己的提示,则需要编写脚本:
#!/usr/bin/env bash
echo "Enter pwd"
read pwd
mysql -u root -p$pwd --execute="SELECT User, Host FROM mysql.user"
-p
请注意,和之间不能有空格,$pwd
因为
mysql
它们被视为$pwd
数据库的名称。
我不建议这样做,因为密码在终端中以明文显示,而mysql -p
显示星号。
答案2
编写 MySQL 查询脚本可以通过几种方式完成。PerlDuck 的回答已经涉及-e
或--execute
参数。另一种方法是使用source
MySQL 本身的命令来运行 SQL 脚本:
$ mysql -u root -p -e 'source foo.sql'
Enter password:
+------+-------------+
| a | b |
+------+-------------+
| 1 | hello world |
+------+-------------+
$ cat foo.sql
use foo_db;
SELECT * FROM foo_tb;
另一种方法是将脚本重定向mysql
到stdin
:
$ sudo mysql -u root -p < foo.sql
Enter password:
a b
1 hello world
注意每种情况下格式的差异。当然你也可以使用here-doc 或 herestring以实现相同的结果,尽管使用文本文件允许执行冗长的查询,但此处的文档和此处的字符串对于中等长度的语句更有用。