Fazendo o mysql CLI me pedir uma senha interativamente

Fazendo o mysql CLI me pedir uma senha interativamente

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 readlê a entrada do usuário e a armazena na $pswvariá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 ( -pflag = prompt de senha interativo).

informação relacionada