Versiones de Bash y 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
Tengo un script bash que intenta capturar el resultado de una consulta MySQL a una variable usando la sustitución de comandos con la contraseña de MySQL como una variable que contiene un signo de dólar y no importa de qué manera lo intente, siempre falla la autenticación con acceso denegado. mensaje o la consulta devuelve el texto del comando de ayuda de MySQL. He probado docenas de combinaciones diferentes de ambos tipos de sustitución de comandos y personajes de escape hasta que las vacas regresan a casa. Aquí hay un ejemplo:
PASS='pass$word'; RESULT=`mysql -u user -p'${PASS}' -h RemoteHostName DBName -e "select count(*) from TableName;"`; echo "${RESULT}";
Esto devolverá "Acceso denegado al usuario"...
PASS='pass$word'; RESULT=`mysql -u user -p\'${PASS}\' -h RemoteHostName DBName -e \"select count\(*\) from TableName\;\"`; echo "${RESULT}";
Esto devolverá el texto de ayuda de MySQL.
Cualquier ayuda sería muy apreciada, gracias de antemano.
Respuesta1
La respuesta de val0x00ff fue correcta en la sección de comentarios de arriba
RESULT=$(mysql -u user -p "${PASS}" -h RemoteHostName DBName -e "select count(*) from TableName;")
Respuesta2
Debes escapar del valor de la contraseña, no de su uso:
PASS="pass\$word"; RESULT=`mysql -u user -p'${PASS}' -h RemoteHostName DBName -e "select count(*) from TableName;"`; echo "${RESULT}";
Como todo lo que sigue a $ se interpreta como una referencia a una variable llamada $palabra
[user@host ~]$ echo "pass$word"
pass
[user@host ~]$ echo "pass\$word"
pass$word