Eu uso o seguinte código como parte de um script muito maior:
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 você pode ver, ele cria um usuário de banco de dados autorizado e com todos os privilégios e uma instância de banco de dados com o mesmo valor (a senha também terá o mesmo valor).
DB user ====> ${domain}.
DB user password ====> ${domain}.
DB instance ====> ${domain}.
Isso é problemático porque preciso que a senha seja diferente. Claro, eu poderia alterar a senha manualmente de `${domain} depois que todo o script terminar de ser executado, mas não é isso que eu quero:
O que eu quero é digitar/colar a senha diretamente na execução,interativamente.
Em outras palavras, quero que a senha do usuário do banco de dados seja solicitada como parte integrante da execução do script.
Já tentei o seguinte código, que falhou:
mysql -u root -p << MYSQL
create user '${DOMAIN}'@'localhost' identified by -p;
create database ${DOMAIN};
GRANT ALL PRIVILEGES ON ${DOMAIN}.* TO ${domain}@localhost;
MYSQL
Qual é a maneira correta de inserir uma senha interativamente, digitando/colando diretamente na execução do script (em vez de alterá-la manualmente após a execução do script)?
Responder1
Basta fazer com que o usuário armazene a variável antecipadamente com 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
Aqui, o comando read
lê a entrada do usuário e a armazena na $psw
variável. Observe que logo após inserir o valor da senha, você será solicitado a fornecer a senha root do MySQL para se conectar ao banco de dados MySQL ( -p
flag = prompt de senha interativo).