我有这个bash脚本:
databases=`mysql -h$DBHOST -u$DBUSER -p$DBPASSWORD -e "SHOW DATABASES;" | tr -d "| " | grep -v Database`
问题是密码包含所有可能的字符。在这种情况下,我怎样才能逃脱$DBPASSWORD
?如果我的密码是'!'并且鉴于命令在反引号中。我没有使用bash脚本的经验,但我已尝试使用"$DBPASSWORD"
和'$DBPASSWORD'
,但它无法正常工作。谢谢
LATER EDIT:链接到脚本,第170行 - > https://github.com/Ardakilic/backmeup/blob/master/backmeup.sh
答案 0 :(得分:3)
答案 1 :(得分:2)
不要在命令行上传递MySQL密码。一,使用包含shell元字符的密码(如您所发现的)可能会很棘手。第二,使用ps
的人可以嗅探密码。
而是将密码放入系统my.cnf
,用户配置文件(例如.mylogin.cnf
)或创建按需文件以保存密码:
function mysql() {
local tmpfile=$(mktemp)
cat > "$tmpfile" <<EOCNF
[client]
password=$DBPASSWORD
EOCNF
mysql --defaults-extra-file="$tmpfile" -u"$DBUSER" -h"$DBHOST" "$@"
rm "$tmpfile"
}
然后你可以运行它:
mysql -e "SHOW DATABASES" | tr -d "| " ....
mysql -e "SELECT * FROM table" | grep -v ...
有关更多示例,请参阅MySQL docs on configuration files。