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
私が間違っていることについてのアイデアはありますか?