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

我有一個 bash 腳本,它嘗試使用命令替換將 MySQL 查詢的結果捕獲到變量,並將 MySQL 密碼作為包含美元符號的變量,無論我嘗試哪種方式,它總是會導致身份驗證失敗並拒絕訪問訊息或查詢傳回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

相關內容