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

関連情報