在没有密码提示的情况下在Ubuntu Natty上安装MySQL并使用shell变量作为密码

时间:2011-11-15 15:19:30

标签: mysql linux ubuntu debconf

我正在尝试从shell脚本在Ubuntu Natty上安装MySQL。但是,我一直遇到一个主要问题:当我尝试在shell脚本之外定义密码时。

下面是我的shell脚本的代码(我保存在/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

所以我在终端输入的内容是:

dbpass="mysqlpass"
chmod +x /etc/init.d/install_mysql
/etc/init.d/install_mysql

MySQL安装,但它没有密码安装,所以我可以像mysql -uroot那样访问mysql(我不想要)。

有趣的是,如果我将密码作为常规文本放在shell脚本中,它就可以了。所以,如果我的安装脚本如下,一切正常(即我必须指定密码才能访问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

有没有办法可以使用shell脚本变量在shell脚本中定义我的密码,而不是字面上输入密码?!

提前致谢。

修改

我刚刚将变量声明$dbpass="mysqlpass"编辑为dbpass="mysqlpass"。这是一个错字。

2 个答案:

答案 0 :(得分:1)

$dbpass="mysqlpass"

是的,这是几种错误。变量名称不以$开头,除非导出,否则变量不会传递给子进程的环境。

dbpass="mysqlpass"
export dbpass

请注意,环境变量被视为共享数据的安全机制;您可能需要重新编写脚本以从stdin读取密码,这样会更安全。

答案 1 :(得分:0)

$dbpass="mysqlpass"

应该是

dbpass="mysqlpass"

正如你所写的那样,$ dbpass将被评估,并且没有被定义,所以它作为一个空变量出现,沸腾到

="mysqlpass"

好吧,既然这是一个错字,那么这就是答案:

MySQL查找envvar MYSQL_PWDhttp://dev.mysql.com/doc/refman/5.0/en/environment-variables.html