2013-06-06 7 views
0

У меня есть Баш скрипт, который имеет следующую строку в егоспециальные символы в Баш скрипт

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

Может быть, вам нужно удвоить? '... UPDATE \\ 'table ....'? –

+0

Пробовал, что .. не работает :-( –

+0

Что с этой частью и несколькими обратными кавычками: \ 'table-name \'. \ 'Config \' Почему бы не оставить ее как 'table-name.config'? –

ответ

2

Escape-последовательности не работают в одинарные кавычки. Используйте двойные кавычки для внешнего большинства цитат, и тогда вам не нужно, чтобы избежать одиночные кавычки внутри:

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

другой способ: 'UPDATE' \ '' table-name.conf '\' '......' (т. е. внутри '' ', вставьте одинарная кавычка: '' \ '' '(в примере это выглядит как двойная кавычка, так как одинарная кавычка так близка) ... уродливая, но сохраняет черту в одинарных кавычках, поэтому избегает большинства специальных символов ($, и т. д.) –

+0

Я попробовал то, что вы сказали, но у меня возникла еще одна проблема. Я обновил свой вопрос –

+1

Задние кавычки внутри двойных кавычек выполняют командную строку оболочки внутри обратных кавычек. Вам нужно избегать их, если запрос находится в двойном кавычки.Кроме того, сохраняйте свои одинарные кавычки, но когда вам нужна одна цитата в строке запроса, используйте последовательность '' \ '' '. Первая цитата заканчивает текущую строку с одной кавычкой; обратная косая черта вставляет одну цитату; окончательная одинарная цитата возобновляет строку с одним кавычком. –

1

предыдущий плакат правильно. В дополнение к предложению использовать двойные кавычки, вы можете захотеть начать строить свой запросString отдельно. Эта практика поможет вам хорошо, так как вы лучше разбираетесь в написании сценариев (и, надеюсь, переходите к чему-то вроде Python). Это также плохая практика для жесткого кодирования учетных данных вашей базы данных в вашем скрипте. Обратите внимание, что вы можете определить эти значения в другом месте (т. Е. В другом скрипте), а затем просто указать этот сценарий. Это делает ваш код модульным. Еще лучше писать функции, источник и повторное использование. Вот пример:

#!/bin/bash 
. /etc/myDbCreds 

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

mysql -u $myUser -p${myPass} -e $myQuery 
+1

Вам нужно заключить запрос в двойные кавычки, не так ли? Я бы включил все ссылки на переменные в командной строке в двойные кавычки. –

0

попробовать это:

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

У меня есть аналогичный вопрос о -e "" из MySQL CMD.

Это выглядит нормально:

$ 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 

Но я не понимаю, почему ...

Смежные вопросы