Bash Mysql 명령 대체 로그인 실패

Bash Mysql 명령 대체 로그인 실패

Bash 및 MySQL 버전:

GNU bash, version 4.2.25(1)-release (x86_64-pc-linux-gnu)
mysql  Ver 14.14 Distrib 5.5.37, for debian-linux-gnu (x86_64) using readline 6.2

달러 기호가 포함된 변수로 MySQL 비밀번호를 사용하여 명령 대체를 사용하여 변수에 대한 MySQL 쿼리 결과를 캡처하려고 시도하는 bash 스크립트가 있는데 어떤 방식으로 시도하든 항상 액세스가 거부되어 인증에 실패합니다. 메시지 또는 쿼리는 MySQL 도움말 명령 텍스트를 반환합니다. 나는 소가 집에 돌아올 때까지 두 가지 유형의 명령 대체와 이스케이프 문자의 다양한 조합을 수십 가지 시도했습니다. 예는 다음과 같습니다.

PASS='pass$word'; RESULT=`mysql -u user -p'${PASS}' -h RemoteHostName DBName -e "select count(*) from TableName;"`; echo "${RESULT}";

그러면 "사용자에 대한 액세스가 거부되었습니다"가 반환됩니다...

PASS='pass$word'; RESULT=`mysql -u user -p\'${PASS}\' -h RemoteHostName DBName -e \"select count\(*\) from TableName\;\"`; echo "${RESULT}";

그러면 MySQL 도움말 텍스트가 반환됩니다.

어떤 도움이라도 대단히 감사하겠습니다. 미리 감사드립니다.

답변1

위의 댓글 섹션에서 val0x00ff의 답변이 정확했습니다.

RESULT=$(mysql -u user -p "${PASS}" -h RemoteHostName DBName -e "select count(*) from TableName;")

답변2

사용법이 아니라 비밀번호 값을 이스케이프해야 합니다.

PASS="pass\$word"; RESULT=`mysql -u user -p'${PASS}' -h RemoteHostName DBName -e "select count(*) from TableName;"`; echo "${RESULT}";

$ 뒤의 모든 내용은 $word라는 변수에 대한 참조로 해석됩니다.

[user@host ~]$ echo "pass$word"
pass
[user@host ~]$ echo "pass\$word"
pass$word

관련 정보