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

관련 정보