Falha de login na substituição do comando Bash Mysql

Falha de login na substituição do comando Bash Mysql

Versões Bash e 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

Eu tenho um script bash que tenta capturar o resultado de uma consulta MySQL para uma variável usando a substituição de comando pela senha do MySQL como uma variável que contém um cifrão e não importa como eu tente, sempre falha na autenticação com acesso negado mensagem ou a consulta retorna o texto do comando de ajuda do MySQL. Eu tentei dezenas de combinações diferentes de ambos os tipos de substituição de comando e caracteres de escape até que as vacas voltassem para casa. Aqui está um exemplo:

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

Isso retornará "Acesso negado ao usuário"...

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

Isso retornará o texto de ajuda do MySQL

Qualquer ajuda seria muito apreciada, desde já obrigado.

Responder1

A resposta de val0x00ff estava correta na seção de comentários acima

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

Responder2

Você precisa escapar do valor da senha, não do seu uso:

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

Como tudo depois do $ está sendo interpretado como uma referência a uma variável chamada $word

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

informação relacionada