2

シェルスクリプトからUbuntuNattyにMySQLをインストールしようとしています。ただし、シェルスクリプトの外部でパスワードを定義しようとすると、1つの大きな問題が発生し続けます。

以下は、シェルスクリプト(/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 -urootmysqlにアクセスするようなことをすることができます(これは必要ありません)。

面白いのは、パスワードを通常のテキストとしてシェルスクリプトに入れれば、問題なく機能することです。したがって、インストールスクリプトが次のようになっている場合、すべてが機能します(つまり、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

パスワードを文字通り入力する代わりに、シェルスクリプト変数を使用してシェルスクリプトでパスワードを定義する方法はありますか?!

前もって感謝します。

編集:

変数宣言$dbpass="mysqlpass"をに編集しましたdbpass="mysqlpass"。タイプミスでした。

4

2 に答える 2

1
$dbpass="mysqlpass"

ええ、これはいくつかのタイプの間違いです。変数名はで始まりません$。また、変数は、エクスポートされない限り、サブプロセスの環境に渡されません。

dbpass="mysqlpass"
export dbpass

環境変数は、データを共有するための安全なメカニズムとは見なされないことに注意してください。代わりにstdinからパスワードを読み取るようにスクリプトを再構築することをお勧めします。これは、もう少し安全です。

于 2011-11-15T15:22:04.327 に答える
0
$dbpass="mysqlpass"

する必要があります

dbpass="mysqlpass"

あなたが書いたように、$ dbpassは評価され、定義されていないので、空の変数として出てきて、

="mysqlpass"

まあ、それはタイプミスだったので、ここに答えがあります:

MySQLはenvvarを探します: httpMYSQL_PWD: //dev.mysql.com/doc/refman/5.0/en/environment-variables.html

于 2011-11-15T15:22:34.040 に答える