Я использую следующий код как часть гораздо более крупного скрипта:
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
переменной. Обратите внимание, что сразу после ввода значения пароля вам будет предложено ввести пароль root MySQL для подключения к базе данных MySQL ( -p
флаг = интерактивный запрос пароля).