@spiller1975
доберусь до самой сути

Как правильно использовать экранирование в bash?

Здравствуйте

Мучаю expect скрипт для автоматизации действия по telnet.
Такой скрипт работает, хотя и не идеально:

#!/usr/bin/expect

spawn telnet-ssl
expect ">"
send "set crlf\r";
expect ">"
send "open  192.168.1.201\r";
expect ''
send  "cd online\r";
expect ''
send "nc 216.146.43.71 80 > 192.168.1.201.ext.ip\r";
expect ''
send "tftp -s -l 192.168.1.201.ext.ip  192.168.1.2\r";
expect ''


Если расширяешь команду nc 216.146.43.71 80 и пробуешь в таком виде:
nc 216.146.43.71 80 | grep -E -o '([0-9]{1,3}[\.]){3}[0-9]{1,3}' > 192.168.1.201.ext.ip


bash ругается.
Как я понимаю нужно экранировать кавычки внутри кавычек, верно?
Помогите с синтаксисом!
  • Вопрос задан
  • 766 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Germanjon
Дело в том, что кавычки (по дефолту) интерпретируют специальные символы $ \ ` . То есть, бэкслеш в вашем примере воспринимается как специальный символ.
Апострофы (одиночные кавычки) передают строку без изменений, то есть символы $ \ ` воспринимаются как обычный символ в тексте.
Имеет смысл заменить кавычки в send на апострофы и "поиграть" с этим.
Linux под рукой нет, поэтому не могу точно указать рабочую версию строки.
Ответ написан
zabudkin
@zabudkin
Инженер-системотехник, программист, админ, ТПУ!!!!
К сожалению не нашёл ответа.
Извините.

А такое не работает?
nc 216.146.43.71 80 | egrep '([0-9]{1,3}[\.]){3}[0-9]{1,3}'
?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы