【问题标题】:bash/mysql complains about ) characterbash/mysql 抱怨 ) 字符
【发布时间】:2009-08-28 16:20:53
【问题描述】:

我正在尝试执行此操作:

$ 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 根本无法登录我(可能密码不正确?)

【问题讨论】:

  • 如果你先用反斜杠“转义”开放括号,它会起作用吗?例如“我的\(密码”

标签: mysql linux bash


【解决方案1】:

某些字符(例如 $、`、" 和有时 \ 在双引号中保留其特殊含义。如果您的密码包含这些字符中的任何一个,请改用单引号。(除非您的密码还包含单引号,在这种情况下您可以完全去掉引号并在每个特殊字符前放一个 \。)

【讨论】:

  • 如果你有很多特殊字符,可以使用'xxxxx'\''yyyy';这使用单引号来抑制除“'”之外的所有特殊字符;序列“'\''”(不包括双引号)终止当前的单引号字符串,添加一个反斜杠单引号,并开始一个新的单引号字符串。
【解决方案2】:

您应该能够将密码放在$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."

【讨论】:

  • 我认为你应该做其中之一。似乎您正在组合两种不同的方法。
  • 良好的反馈。是的,我描述了两个不同的替代选项,但文本并没有说明这一点。我会说得更清楚。
【解决方案3】:

如果你没有在命令行输入密码,它会弹出一个交互式提示。这可能会解决您的错误。只需使用-p 而不是--password=XXX

当然,如果您需要在无人值守的情况下访问脚本,这不是一个非常有用的答案。如果您可以创建一个最小的示例并告诉我们 Bash 给您的确切错误,将会更有帮助。

【讨论】:

  • 现在我的高清工作密集,所以我想是有什么事情发生了......谢谢
猜你喜欢
  • 2016-08-14
  • 2014-10-07
  • 2014-10-14
  • 2019-07-15
  • 2015-12-13
  • 2018-10-14
  • 1970-01-01
  • 2019-01-01
  • 1970-01-01
相关资源
最近更新 更多