1

我有一个 bash 脚本,其中包含以下行

mysql -uusername -ppassword -e 'UPDATE \'table-name.config\' SET value=1234567890 WHERE action_code=102 AND name=\'last_updated_date\';'

但我明白了

./hybrid_telepath/install: line 856: unexpected EOF while looking for matching `''
./hybrid_telepath/install: line 872: syntax error: unexpected end of file

很明显我的角色有问题,不能很好地关闭线路。

知道如何在 bash 中做到这一点吗?

如果我将其更改为

mysql -uusername -ppassword -e "UPDATE `table-name`.`config` SET value=1312626266 WHERE action_code=102 AND name='last_updated_date';"

我明白了

line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET value=1312626266 WHERE action_code=102 AND name=last_updated_date' at line 1

谢谢

4

4 回答 4

2

转义序列在单引号内不起作用。对最外层的引号使用双引号,然后您不需要在其中转义单引号:

mysql -uusername -ppassword -e "UPDATE 'table-name.config' SET value=1234567890 WHERE action_code=102 AND name='last_updated_date';"
于 2013-06-06T16:06:26.130 回答
1

之前的海报是正确的。除了使用双引号的建议之外,您可能还想单独开始构建您的 queryString。随着您在脚本编写方面的进步(并且希望转向 Python 之类的东西),这种做法将为您提供很好的服务。在脚本中硬编码数据库凭据也是一种不好的做法。请注意,您可以在其他地方(即在另一个脚本中)定义这些值,然后只需获取该脚本即可。这使您的代码模块化。更好的是,编写函数、获取它们并重用。这是一个例子:

#!/bin/bash
. /etc/myDbCreds

myQuery="select * from foo where bar ='snafu';"

mysql -u $myUser -p${myPass} -e $myQuery
于 2013-06-06T16:17:20.883 回答
1

尝试这个:

mysql -uusername -ppassword -e "UPDATE \'table-name.config\' SET value=1234567890 WHERE action_code=102 AND name=\'last_updated_date\';"
于 2013-10-25T19:50:42.077 回答
1

我对 mysql cmd 的 -e "" 有类似的问题。

这看起来很正常:

$ mysql -h vip0 -u root -pqwerty -e "show databases;" 
+--------------------+ 
| Database           | 
+--------------------+ 
| information_schema | 
| mysql              | 
| performance_schema | 
+--------------------+ 

但是如果我想通过 ssh 执行它,它就不起作用:

$ ssh g1 --  mysql -hvip0 -uroot -pqwerty -e "show databases;" 
ERROR 1049 (42000): Unknown database 'databases' 

经测试,我似乎需要逃离这个空间:

$ ssh g1 --  mysql -hvip0 -uroot -pqwerty -e "show\ databases;" 
Database 
information_schema 
mysql 
performance_schema

但我不明白为什么...

于 2017-01-21T05:45:11.427 回答