Установите MySQL на Ubuntu Natty без запроса пароля и используя переменную оболочки в качестве пароля - PullRequest
2 голосов
/ 15 ноября 2011

Я пытаюсь установить MySQL на Ubuntu Natty из сценария оболочки. Однако я продолжаю сталкиваться с одной большой проблемой: когда я пытаюсь определить пароль вне сценария оболочки.

Ниже приведен код моего сценария оболочки (который я сохранил в /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 (что мне не нужно).

Забавно, если я введу пароль в сценарии оболочки как обычный текст, он будет работать нормально. Так что, если мой сценарий установки выглядит следующим образом, все работает (т.е. я должен указать пароль для доступа к 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

Можно ли использовать переменную сценария оболочки для определения своего пароля в сценарии оболочки вместо буквального ввода пароля?!

Заранее спасибо.

EDIT:

Я только что отредактировал объявление переменной $dbpass="mysqlpass" в dbpass="mysqlpass". Это была опечатка.

Ответы [ 2 ]

1 голос
/ 15 ноября 2011
$dbpass="mysqlpass"

Да, это несколько типов ошибок.Имена переменных не начинаются с $, и переменные не будут переданы в среду подпроцессов, пока они не экспортированы.

dbpass="mysqlpass"
export dbpass

Обратите внимание, что переменные среды не считаются безопаснымимеханизм обмена данными;вы можете захотеть переустановить ваш скрипт, чтобы вместо этого прочитать пароль из stdin, что было бы немного более безопасно.

0 голосов
/ 15 ноября 2011
$dbpass="mysqlpass"

должно быть

dbpass="mysqlpass"

Как вы уже написали, $ dbpass будет оцениваться, и не будет определен, поэтому выходит как пустая переменная, сводящаяся к

="mysqlpass"

хорошо, так как это была опечатка, вот ответ:

MySQL ищет envvar MYSQL_PWD: http://dev.mysql.com/doc/refman/5.0/en/environment-variables.html

...