我正在尝试执行此操作:
$ 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根本不会登录我(可能是密码不正确?)
答案 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给你的确切错误会更有帮助。