2017-02-21 7 views
0

MySQL 데몬이 시작될 때 만들어지는 임시 루트 암호를 변경해야합니다. 문제는 임시 비밀번호에 이스케이프 처리해야하는 이상한 문자 (예 : 왼쪽/오른쪽 괄호)가 있음을들 수 있습니다. 자, 일반적으로 문자를 이스케이프하는 방법에 대한 여러 글 (here, here, here)이 있지만이 게시물은 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