Error de inicio de sesión de sustitución del comando Bash Mysql

Error de inicio de sesión de sustitución del comando Bash Mysql

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

información relacionada