bash / mysql抱怨)字符

时间:2009-08-28 16:20:53

标签: mysql linux bash

我正在尝试执行此操作:

$ mysql --user=XXX --password=XXX --batch --skip-column-names \
 -e "SELECT userid, displayname FROM Users" stackoverflowdb | \
split -l 50 -a 5 - "result."

但bash抱怨''意外'字符(我的mysql密码中有这个字符和其他很少的'怪异'字符)。我试着用引号--password="myweirdpasshere"取密码,但是mysql根本不会登录我(可能是密码不正确?)

3 个答案:

答案 0 :(得分:3)

某些字符,如$,`,“,有时\仍然在双引号中保留其特殊含义。如果您的密码包含任何这些字符,请使用单引号。(除非您的密码也包含单引号,在这种情况下)你可能只是完全删除引号并在每个特殊字符前放一个\。

答案 1 :(得分:3)

您应该能够将密码放在$HOME/.my.cnf文件中,避免此问题以及提高安全性

使用$HOME/.my.cnf的另一个选择是将配置文件嵌入到脚本中。对documentation的评论给出了这方面的例子。对于你的情况应该是:

$ mysql --user=XXX --defaults-file <(printf '[client]\npassword=XXX\n') \
--batch --skip-column-names \
-e "SELECT userid, displayname FROM Users" stackoverflowdb | \
split -l 50 -a 5 - "result."

答案 2 :(得分:2)

如果您未在命令行上输入密码,则会显示交互式提示。这可能会解决您的错误。只需使用-p代替--password=XXX

当然,如果您需要无人参与的脚本访问,那不是一个非常有用的答案。如果你能创建一个最小的例子并告诉我们Bash给你的确切错误会更有帮助。