I'm trying to install MySQL on Ubuntu Natty from a shell script. However, I keep running into one major issue: when I try to define the password outside of the shell script.
Below is the code to my shell script (which I have saved in /etc/init.d/install_mysql:
export DEBIAN_FRONTEND=noninteractive
echo mysql-server-5.1 mysql-server/root_password password $dbpass | debconf-set-selections
echo mysql-server-5.1 mysql-server/root_password_again password $dbpass | debconf-set-selections
apt-get -y install mysql-server
So what I enter in the terminal is:
dbpass="mysqlpass"
chmod +x /etc/init.d/install_mysql
/etc/init.d/install_mysql
MySQL installs, but it installs without a password, so I can just do something like mysql -uroot
to access mysql (which I don't want).
The funny thing is if I put the password in the shell script as regular text, it works ok. So if I my install script is as follows, everything works (i.e. I must specify a password to access mysql):
export DEBIAN_FRONTEND=noninteractive
echo mysql-server-5.1 mysql-server/root_password password mysqlpass | debconf-set-selections
echo mysql-server-5.1 mysql-server/root_password_again password mysqlpass | debconf-set-selections
apt-get -y install mysql-server
Is there a way I can use a shell script variable to define my password in the shell script, instead of entering the password literally?!
Thanks in advance.
EDIT:
I just edited the variable declaration $dbpass="mysqlpass"
to dbpass="mysqlpass"
. It was a typo.
Yeah, this is several types of wrong. Variable names don't start with
$
, and variables won't be passed to the environment of subprocesses unless exported.Note that environment variables are not considered a secure mechanism for sharing data; you may want to retool your script to read the password from stdin instead, which would be a bit more secure.