mysql CLI で対話的にパスワードを尋ねさせる

mysql CLI で対話的にパスワードを尋ねさせる

私は次のコードを、より大きなスクリプトの一部として使用します。

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

ご覧のとおり、承認された全権限を持つ DB ユーザーと、同じ値 (パスワードも同じ値) を持つ DB インスタンスが作成されます。

DB user ====> ${domain}.
DB user password ====> ${domain}.
DB instance ====> ${domain}.

これは、パスワードを別のものにする必要があるため問題になります。もちろん、スクリプト全体の実行が完了した後に、`${domain} から手動でパスワードを変更することもできますが、それは私が望んでいることではありません。

私が望んでいるのは、実行時にパスワードを直接入力/貼り付けることです。インタラクティブに

言い換えれば、DB ユーザーのパスワードの入力を求めるプロンプトがスクリプト実行の不可欠な部分となるようにしたいのです。

すでに次のコードを試しましたが、失敗しました。

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

スクリプト実行後に手動で変更するのではなく、スクリプト実行時に直接入力/貼り付けして、対話的にパスワードを挿入できるようにする正しい方法は何ですか?

答え1

次のようにして、ユーザーに事前に変数を保存してもらいます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 

ここで、コマンドはreadユーザー入力を読み取り、それを$psw変数に保存します。パスワード値を入力した直後に、MySQL データベースに接続するために MySQL ルート パスワードの入力が求められることに注意してください (-pフラグ = 対話型パスワード プロンプト)。

関連情報