Utilizo el siguiente código como parte de un script mucho más grande:
mysql -u root -p << MYSQL
create user '${DOMAIN}'@'localhost' identified by '${DOMAIN}';
create database ${DOMAIN};
GRANT ALL PRIVILEGES ON ${DOMAIN}.* TO ${domain}@localhost;
MYSQL
Como puede ver, crea un usuario de base de datos autorizado y con todos los privilegios, y una instancia de base de datos con el mismo valor (la contraseña también tendrá el mismo valor).
DB user ====> ${domain}.
DB user password ====> ${domain}.
DB instance ====> ${domain}.
Esto es problemático porque necesito que la contraseña sea diferente. Por supuesto, podría cambiar la contraseña manualmente desde `${dominio} después de que termine de ejecutarse todo el script, pero eso no es lo que quiero:
Lo que quiero es escribir/pegar la contraseña directamente en la ejecución,interactivamente.
En otras palabras, quiero que se me solicite la contraseña del usuario de la base de datos como parte integral de la ejecución del script.
Ya probé el siguiente código, que falló:
mysql -u root -p << MYSQL
create user '${DOMAIN}'@'localhost' identified by -p;
create database ${DOMAIN};
GRANT ALL PRIVILEGES ON ${DOMAIN}.* TO ${domain}@localhost;
MYSQL
¿Cuál es la forma correcta de poder insertar una contraseña de forma interactiva, ya sea escribiendo/pegando directamente en la ejecución del script (en lugar de cambiarla manualmente después de la ejecución del script)?
Respuesta1
Simplemente haga que el usuario almacene la variable de antemano con 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
Aquí, el comando read
lee la entrada del usuario y la almacena en la $psw
variable. Tenga en cuenta que justo después de ingresar el valor de la contraseña, se le solicitará la contraseña raíz de MySQL para poder conectarse a la base de datos MySQL ( -p
bandera = solicitud de contraseña interactiva).