私は次のコードを、より大きなスクリプトの一部として使用します。
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
フラグ = 対話型パスワード プロンプト)。