使 mysql CLI 以交互方式询问我的密码

Arc*_*ing 2 command-line password prompt mysql interactive

我使用以下代码作为更大脚本的一部分:

mysql -u root -p << MYSQL
    create user '${DOMAIN}'@'localhost' identified by '${DOMAIN}';
    create database ${DOMAIN};
    GRANT ALL PRIVILEGES ON ${DOMAIN}.* TO ${domain}@localhost;
MYSQL
Run Code Online (Sandbox Code Playgroud)

如您所见,它创建了一个授权的、所有特权的数据库用户,以及一个具有相同值(密码也将具有相同值)的数据库实例。

DB user ====> ${domain}.
DB user password ====> ${domain}.
DB instance ====> ${domain}.
Run Code Online (Sandbox Code Playgroud)

这是有问题的,因为我需要不同的密码。当然,我可以在整个脚本完成执行后从 `${domain} 手动更改密码,但这不是我想要的:

我想要的是直接在执行时以交互方式键入/粘贴密码。

换句话说,我希望提示我输入数据库用户的密码是运行脚本的一个组成部分。

我已经尝试过以下代码,但失败了:

mysql -u root -p << MYSQL
    create user '${DOMAIN}'@'localhost' identified by -p;
    create database ${DOMAIN};
    GRANT ALL PRIVILEGES ON ${DOMAIN}.* TO ${domain}@localhost;
MYSQL
Run Code Online (Sandbox Code Playgroud)

通过在脚本执行中直接键入/粘贴(而不是在脚本执行后手动更改),能够以交互方式插入密码的正确方法是什么?

dr_*_*dr_ 5

只需让用户预先存储变量read

echo "Please enter password for user ${domain}: "; read -s psw
mysql -u root -p << MYSQL
  create user '${domain}'@'localhost' identified by '${psw}';
  create database ${domain};
  GRANT ALL PRIVILEGES ON ${domain}.* TO ${domain}@localhost;
MYSQL 
Run Code Online (Sandbox Code Playgroud)

在这里,该命令read读取用户输入并将其存储在$psw变量中。请注意,在输入密码值后,系统会提示您输入 MySQL 根密码以连接到 MySQL 数据库(-p标志 = 交互式密码提示)。