我有一个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
由于
答案 0 :(得分:2)
转义序列在单引号内不起作用。对你的最外面的引号使用双引号,然后你不需要在单引号内转义:
mysql -uusername -ppassword -e "UPDATE 'table-name.config' SET value=1234567890 WHERE action_code=102 AND name='last_updated_date';"
答案 1 :(得分:1)
上一张海报是正确的。除了建议您使用双引号之外,您可能还想分别开始构建queryString。这种做法将为您提供更好的服务,因为您可以更好地编写脚本(并且希望能够继续使用像Python这样的东西)。在脚本中对数据库凭据进行硬编码也是一种不好的做法。请注意,您可以在其他地方(即,在另一个脚本中)定义这些值,然后只需获取该脚本。这使您的代码模块化。更好的是,编写函数,源代码和重用。这是一个例子:
#!/bin/bash
. /etc/myDbCreds
myQuery="select * from foo where bar ='snafu';"
mysql -u $myUser -p${myPass} -e $myQuery
答案 2 :(得分:0)
试试这个:
mysql -uusername -ppassword -e "UPDATE \'table-name.config\' SET value=1234567890 WHERE action_code=102 AND name=\'last_updated_date\';"
答案 3 :(得分:0)
我有一个关于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
但我不明白为什么......