On 03/14/2017 06:29 PM, Richard wrote: > >> Date: Tuesday, March 14, 2017 14:53:01 -0700 >> From: Robert Moskowitz <rgm at htt-consult.com> >> >> I want to script a rather simple create database operation. Thing >> is, I have to provide the password for that database. I would like >> to do this with an environment variable, but the simple approach >> dose not work: >> >> mailpswd=charlie >> >> mysql -u root -p >> >> CREATE DATABASE mailfix; >> CREATE USER 'mailfix'@'localhost' IDENTIFIED BY $mailpswd; >> GRANT ALL PRIVILEGES ON `mailfix` . * TO 'mailfix'@'localhost'; >> >> Of course the mysql command needs the mysql root password, but that >> is as expected. But mysql will not process $mailpswd, not >> surprisingly. >> >> I know I could create a file with these commands, sed the password >> into the file, then pipe thr file into mysql. I would rather do >> this directly without a temp file. >> > Using the "-e --execute" option you can execute mysql/mariadb > commands from the command line, one at a time. You don't have to put > them into a file first. That should allow you to do what you're > after, including doing variable substitution of the password on the > line you want to execute. You can also put the mysql root pw on that > line with substitution so no prompting is involved. I saw this, and at first did not like it, as how to manage the mysql root password, so I found how to use here doc: mysql -u root -p <<EOF || exit 1 CREATE DATABASE postfix; CREATE USER postfix at localhost IDENTIFIED BY "$Postfix_Database_Password"; GRANT ALL PRIVILEGES ON postfix.* TO postfix at localhost; EOF next refinement is: mysql -u root -p$mysql_root_Password <<EOF || exit 1 CREATE DATABASE postfix; CREATE USER postfix at localhost IDENTIFIED BY "$Postfix_Database_Password"; GRANT ALL PRIVILEGES ON postfix.* TO postfix at localhost; EOF