0

我需要更改启动 MySQL 守护程序时创建的临时 root 密码。问题是临时密码有一些奇怪的字符(例如左/右括号)需要转义。现在,有几篇关于如何转义字符的文章(这里这里这里),但这篇文章是在使用 bash 脚本更改可能包含特殊字符的临时 MySQL root 密码的背景下进行的。

目前,我的脚本如下所示。

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

1

使用双引号对我有用:

password=$(grep 'temporary password' /var/log/mysqld.log | awk '{print $11}')
mysqladmin --user=root --password="$password" password aaBB@@cc1122
于 2017-08-22T23:03:59.850 回答