Bash Mysql Befehlsersetzung Login-Fehler

Bash Mysql Befehlsersetzung Login-Fehler

Bash- und MySQL-Versionen:

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

Ich habe ein Bash-Skript, das versucht, das Ergebnis einer MySQL-Abfrage in einer Variablen zu erfassen, indem es Befehle mit dem MySQL-Passwort als Variable ersetzt, die ein Dollarzeichen enthält. Egal, wie ich es versuche, die Authentifizierung schlägt immer mit der Meldung „Zugriff verweigert“ fehl oder die Abfrage gibt den MySQL-Hilfebefehlstext zurück. Ich habe Dutzende verschiedener Kombinationen beider Arten von Befehlsersetzungen und Escape-Zeichen ausprobiert, bis die Kühe nach Hause kommen. Hier ist ein Beispiel:

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

Dies gibt „Zugriff für Benutzer verweigert“ zurück …

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

Dadurch wird der MySQL-Hilfetext zurückgegeben.

Ich wäre für jede Hilfe sehr dankbar, vielen Dank im Voraus.

Antwort1

Die Antwort von val0x00ff im Kommentarbereich oben war korrekt

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

Antwort2

Sie müssen den Kennwortwert maskieren, nicht seine Verwendung:

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

Da alles nach dem $ als Verweis auf eine Variable namens $word interpretiert wird

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

verwandte Informationen