我如何从一个bash脚本传递密码的性向,为安装MySQL?(How can I pass a pas

2019-06-27 04:30发布

我写一个简单的bash脚本在Ubuntu上安装MySQL。

#!/bin/bash
apt-get update

# Install MySQL5 
aptitude -y install mysql-server mysql-client libmysqlclient15-dev

但是MySQL的提示输入密码和确认。 如何沿着root密码通过。 有没有回音,我可以使用?

Answer 1:

这是容易得多..

在Ubuntu上安装mysql没有密码提示

sudo debconf-set-selections <<< 'mysql-server-5.1 mysql-server/root_password password your_password'
sudo debconf-set-selections <<< 'mysql-server-5.1 mysql-server/root_password_again password your_password'
sudo apt-get -y install mysql-server

如果你的shell不支持here-strings (zsh的,ksh93的和bash支持他们),使用:

echo ... | sudo debconf-set-selections 


Answer 2:

感谢您对期待小费。 所以我希望去我无法通过搜索Ubuntu的管理论坛上找到任何东西。 你可以通过这个帖子的时间戳看,我花了3个小时搞不定。 下面是代码,我希望它可以帮助别人:

#!/bin/bash
apt-get update
apt-get install expect

VAR=$(expect -c '
spawn apt-get -y install mysql-server
expect "New password for the MySQL \"root\" user:"
send "PasswordHere\r"
expect "Repeat password for the MySQL \"root\" user:"
send "PasswordHere\r"
expect eof
')

echo "$VAR"

apt-get -y install mysql-client libmysqlclient15-dev   

#For some reason important to restart - otherwise possible errors

/etc/init.d/mysql stop
/etc/init.d/mysql start


Answer 3:

这是新的服务器我的安装脚本的摘录。 你应该能够字对字复制它除了密码。

你需要运行这个使用sudo,如果你不是已经根。

#!/bin/bash
export DEBIAN_FRONTEND=noninteractive
apt-get -q -y install mysql-server
echo "Give mysql server time to start up before we try to set a password..."
sleep 5
mysql -uroot -e <<EOSQL "UPDATE mysql.user SET Password=PASSWORD('yourpasswordhere') WHERE User='root'; FLUSH PRIVILEGES;"
EOSQL
echo "Done setting mysql password."

其他答案已经使用,这使得易于得到总是回答yes问题-y。 该-q隐藏了一些进展指标,以便您可以将输出发送到日志。 你也可以使用-qq,它会自动给你一个-y。 这是在apt-get的手册页。

<<EOSQL是可读性bash的定界符。

我得到了这个家伙该解决方案的一部分定界符: http://padwasabimasala.posterous.com/non-interactive-scripted-mysql-install-on-ubu

与定界符要记住的一点是,空白收盘串打破它。 所以,不要缩进该行。 这是一个关于定界符页: http://tldp.org/LDP/abs/html/here-docs.html



Answer 4:

要做到这一点最简单的方法是使用DEBIAN_FRONTEND环境变量和资质-q和-y标志:

sudo DEBIAN_FRONTEND=noninteractive aptitude install -q -y mysql-server

或者更一般地,假设输入sudo密码已经照顾到一些知识:

#!/bin/bash
INSTALLER_LOG=/var/log/my-installer.log

installnoninteractive(){
  sudo bash -c "DEBIAN_FRONTEND=noninteractive aptitude install -q -y $* >> $INSTALLER_LOG"
}

installnoninteractive mysql-server


Answer 5:

考虑使用期望

它可用于自动化大部分的互动环节,虽然我不会用root密码



Answer 6:

当作为超级用户推出的这个脚本是成功的:

#!/bin/bash

export temp_mysql_password="**********"
export DEBIAN_FRONTEND=noninteractive 

debconf-set-selections <<< "mysql-server mysql-server/root_password password $temp_mysql_password"
debconf-set-selections <<< "mysql-server mysql-server/root_password_again password $temp_mysql_password"
debconf-set-selections <<< "mysql-server-5.6 mysql-server/root_password password $temp_mysql_password"
debconf-set-selections <<< "mysql-server-5.6 mysql-server/root_password_again password $temp_mysql_password"

apt-get update
apt-get -y upgrade
apt-get -y install mysql-server


Answer 7:

预计可能是矫枉过正。 看看在Debian或Ubuntu管理员论坛之一 - 比如FAI等人长期使用预置的debconf的问题。 你应该能够太在这里使用。

最后,你很可能也使用apt-get本身或其他前端。



文章来源: How can I pass a password from a bash script to aptitude for installing mysql?