Ich verwende den folgenden Code als Teil eines viel größeren Skripts:
mysql -u root -p << MYSQL
create user '${DOMAIN}'@'localhost' identified by '${DOMAIN}';
create database ${DOMAIN};
GRANT ALL PRIVILEGES ON ${DOMAIN}.* TO ${domain}@localhost;
MYSQL
Wie Sie sehen, werden ein autorisierter DB-Benutzer mit allen Berechtigungen und eine DB-Instanz mit demselben Wert erstellt (das Kennwort hat ebenfalls den gleichen Wert).
DB user ====> ${domain}.
DB user password ====> ${domain}.
DB instance ====> ${domain}.
Das ist problematisch, weil ich ein anderes Passwort brauche. Natürlich könnte ich das Passwort von `${domain} manuell ändern, nachdem das ganze Skript ausgeführt wurde, aber das ist nicht das, was ich will:
Ich möchte das Passwort direkt bei der Ausführung eingeben/einfügen.interaktiv.
Mit anderen Worten möchte ich, dass die Abfrage des Kennworts des DB-Benutzers ein integraler Bestandteil der Ausführung des Skripts ist.
Ich habe bereits den folgenden Code ausprobiert, der fehlgeschlagen ist:
mysql -u root -p << MYSQL
create user '${DOMAIN}'@'localhost' identified by -p;
create database ${DOMAIN};
GRANT ALL PRIVILEGES ON ${DOMAIN}.* TO ${domain}@localhost;
MYSQL
Was ist die richtige Möglichkeit, ein Kennwort interaktiv einzugeben, indem es entweder direkt während der Skriptausführung eingegeben/eingefügt wird (anstatt es nach der Skriptausführung manuell zu ändern)?
Antwort1
Lassen Sie den Benutzer die Variable einfach vorher mit folgendem speichern 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
Hier read
liest der Befehl die Benutzereingaben und speichert sie in der $psw
Variable. Beachten Sie, dass Sie direkt nach der Eingabe des Kennwortwerts nach dem MySQL-Root-Kennwort gefragt werden, um eine Verbindung zur MySQL-Datenbank herzustellen ( -p
Flag = interaktive Kennwortabfrage).