在bash脚本中查询MySQL SHOW GRANTS包括本地文件

时间:2015-09-12 15:30:12

标签: mysql linux bash

我正在尝试编写一个bash脚本,以便在继续之前检查特定MySQL用户是否具有相应的权限。

如果我直接从mysql执行命令,我会得到以下内容:

$ mysql -u db_user -pmypassword
mysql> show grants;
+------------------------------------------------------------------------------------------------------------------------------+
| Grants for db_user@localhost                                                                                            |
+------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'db_user'@'localhost' IDENTIFIED BY PASSWORD 'some-password-here' |

这正是我正在寻找的东西。

当我把它放入脚本时,这种奇怪的行为就会发挥作用。我写了这个非常基本的脚本来说明:

passwd=mypassword
user=db_user

line=`mysql -u ${user} -p${passwd}  -e "show grants for '${user}'@'localhost';"`
echo $line

我得到以下内容:

Grants for db_user@localhost GRANT ALL PRIVILEGES ON blah.tst dropsite.sh mysql.sh runasroot.sh testopts.sh TO 'db_user'@'localhost' IDENTIFIED BY PASSWORD 'some-password-here' 

不知何故,本地目录中的文件也被列出了。他们是

blah.tst     <----- This test file was added when I discovered the behavior 
dropsite.sh 
mysql.sh 
runasroot.sh 
testopts.sh

我似乎无法弄清楚为什么会出现这些问题。有没有人有任何想法?

1 个答案:

答案 0 :(得分:1)

引用你的变量:

echo "$line"

如果不引用变量,则会扩展值中的通配符,因此结果中的*.*将替换为与该模式匹配的所有文件。