Как вывести эту строку в удаленный файл?

175
Dave

Я использую оболочку bash и пытаюсь найти правильный способ написать следующее:

ssh mysuer@remotehost 'echo "update user set url = \'localhost\' where url = \'mydomain.com\';" >> /tmp/db.sql' 

Пока вышеупомянутое не работает.

После нажатия введите следующую строку, >как будто он ожидает, что я где-то закрою открытую котировку. Что мне нужно сделать, чтобы это

update user set url = 'localhost' where url = 'mydomain.com'; 

выводится в удаленный файл?

1
возможный дубликат [Выходящий апостроф в строке одинарных кавычек в bash] (http://superuser.com/questions/481797/escaping-apostrophe-in-single-quotes-string-in-bash) kenorb 9 лет назад 0

2 ответа на вопрос

1
kenorb

Одиночные кавычки не могут быть экранированы, но вы можете завершить существующую, напечатать apostrophe ( \') и открыть новую.

Вот правильный синтаксис:

ssh user@host 'echo "update user set url = '\''localhost'\'' where url = '\''mydomain.com'\'';" >> /tmp/db.sql' 
0
gogoud

Это должно работать, если вы удаляете обратную косую черту из одинарных кавычек внутри оператора mysql:

ssh mysuer@remotehost 'echo "update user set url = 'localhost' where url = 'mydomain.com';" >> /tmp/db.sql' 
Это не работает Вместо этого, то, что отдается удаленному файлу, это «обновить пользовательский набор url = localhost, где url = mydomain.com;». Обратите внимание, что одинарные кавычки отсутствуют вокруг ключевых слов, где я хочу их. Dave 9 лет назад 0
хорошо, попробуйте изменить одинарные кавычки внутри оператора mysql на экранированные двойные кавычки. gogoud 9 лет назад 0
вот еще один способ: `ssh mysuer @ remotehost 'echo" обновить пользовательский набор url =' "'localhost'" 'где url =' "'mydomain.com'" '; "'` gogoud 9 лет назад 0