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