大きなスクリプトの一部として、次のコードを使用しています。
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 user ====> ${domain}.
DB user password ====> ${domain}.
DB instance ====> ${domain}.
別のパスワードが必要なので問題になります。もちろん、スクリプト全体の実行が完了したら、 `$ {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
スクリプトの実行後にパスワードを手動で変更するのではなく、スクリプトの実行に直接入力/貼り付けてパスワードをインタラクティブに挿入する正しい方法は何ですか?
ベストアンサー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
フラグ=対話型パスワードプロンプト)。