Bash Mysql コマンド置換ログイン失敗

Bash Mysql コマンド置換ログイン失敗

Bash および 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

私は、MySQL パスワードをドル記号を含む変数としてコマンド置換を使用して変数に MySQL クエリの結果をキャプチャしようとする bash スクリプトを持っていますが、どの方法を試しても、アクセス拒否メッセージで認証に失敗するか、クエリが MySQL ヘルプ コマンド テキストを返します。私は、コマンド置換と文字のエスケープの両方の異なる組み合わせを何十通りも試しました。次に例を示します。

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

これにより、「ユーザーのアクセスが拒否されました」が返されます...

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

MySQLヘルプテキストを返します

ご協力いただければ幸いです。よろしくお願いします。

答え1

上のコメント欄のval0x00ffさんの回答は正しかったです

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

答え2

パスワードの使用法ではなく、パスワードの値をエスケープする必要があります。

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

$の後の全ては$wordという変数への参照として解釈されるので

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

関連情報