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

0

Versões do Bash e do 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 com a senha do MySQL como uma variável que contém um sinal de dólar e não importa de que maneira eu tente, sempre falha autenticação com mensagem de acesso negado 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é as vacas chegarem em 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 para o 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, obrigado antecipadamente.

    
por Nathan 09.10.2014 / 16:25

2 respostas

2

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;")
    
por 10.10.2014 / 15:09
0

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 após o $ 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
    
por 09.10.2014 / 16:34