2017-02-21 9 views
0

MySQLデーモンの起動時に作成される一時的なルートパスワードを変更する必要があります。問題は、一時パスワードにエスケープする必要のある奇妙な文字(たとえば、左かっこなど)があることです。さて、文字をエスケープする方法についてはいくつかの投稿(hereherehere)がありますが、この投稿はbashスクリプトを使って特別な文字を持つ一時的なMySQLルートパスワードを変更するコンテキストです。bashシェルスクリプトを使用して一時的なルートMySQLパスワードを変更するにはどうすればよいですか?

現在、私のスクリプトは次のようになっています。

function startMysql { 
    sudo service mysqld start 
    echo "started mysql" 

    export PW=$(grep 'temporary password' /var/log/mysqld.log | awk '{print $11}') 
    # export PASS=\'$PW\' 
    echo "temporary password is $PW" 
    mysqladmin -u root -p$PW password [email protected]@cc1122 
    # the following doesn't work either 
    # mysqladmin -u root -p$PASS password [email protected]@cc1122 
    echo "changed mysql password" 
} 

一時的なパスワードは次のようになることがあります。

  • BYkc *)、ZM3-_

私は、端末上で以下を入力すると、それが動作します。

mysqladmin -u root -p'BYkc*),ZM3-_' password [email protected]@cc1122 

ただし、スクリプト内では失敗します。ここでは、単引用符を入れようとしたいくつかの方法があります。$PW成功なし。

私が間違っているのかについての任意のアイデア?

+0

'はあなたを与える'「仮パスワードは$ PWである」とは何をエコーし​​ていますか? 'mysqladmin -u root -p" $ PW "password aaBB @@ cc1122"はうまくいくはずです。 – miken32

+0

どうして失敗するのですか? –

+0

コンソールへのエコーが正しいと表示されます。しかし、私は間違ったパスワードを渡したかのように私はまだ認証の失敗を取得します。 –

答えて

0

それは二重引用符を使用して私のための作業を行います。

password=$(grep 'temporary password' /var/log/mysqld.log | awk '{print $11}') 
mysqladmin --user=root --password="$password" password [email protected]@cc1122 
関連する問題