0

MySQL デーモンの起動時に作成される一時的な root パスワードを変更する必要があります。問題は、一時パスワードに、エスケープする必要のある奇妙な文字 (左右の括弧など) が含まれていることです。現在、一般的に文字をエスケープする方法に関するいくつかの投稿 (ここここここ) がありますが、この投稿は 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 aaBB@@cc1122
    # the following doesn't work either
    # mysqladmin -u root -p$PASS password aaBB@@cc1122
    echo "changed mysql password"
}

一時パスワードは次のようになる場合があることに注意してください。

  • BYkc*),ZM3-_

ターミナルで次のように入力すると、機能します。

mysqladmin -u root -p'BYkc*),ZM3-_' password aaBB@@cc1122

しかし、スクリプト内では失敗します。$PW以下は、成功せずに一重引用符を配置しようとしたいくつかの方法です。

  • mysqladmin -u root -p"'$PW'" password aaBB@@cc1122
  • mysqladmin -u root -p\''$PW'\' password aaBB@@cc1122
  • mysqladmin -u root -p"$PW" password aaBB@@cc1122
  • mysqladmin -u root -p"\"$PW\"" password aaBB@@cc1122

私が間違っていることについてのアイデアはありますか?

4

1 に答える 1