Как правильно использовать escape-камень для ввода в оболочку? - PullRequest
0 голосов
/ 17 февраля 2012

В " Escape # shell_command " не так много информации о том, как правильно бежать.Я неправильно попытался:

link = "http://www.google.com"
p system(Escape.shell_command(["bash --login -c 'echo $PATH &>/dev/null'","wget --quiet -O - #{link} | ssed -n -e 'H;${x;s!.*<head[^>]*>\(.*\)</head>.*!\1!;T;s!.*<title>\(.*\)</title>.*!\1!p}'"]))

, что в основном две команды: Первая говорит $PATH использовать мой профиль и подавить вывод:

bash --login -c 'echo $PATH &>/dev/null'

Вторая команда использует wget для полученияссылка и направляет ее в ssed для анализа заголовка.

wget --quiet -O - #{link} | ssed -n -e 'H;${x;s!.*<head[^>]*>\(.*\)</head>.*!\1!;T;s!.*<title>\(.*\)</title>.*!\1!p}'

В этом случае sed будет хорошо работать для пользователей Linux.

В bash команда работает правильно:

wget --quiet -O - http://www.google.com | ssed -n -e 'H;${x;s!.*<head[^>]*>\(.*\)</head>.*!\1!;T;s!.*<title>\(.*\)</title>.*!\1!p}'

РЕДАКТИРОВАТЬ:

Я забыл опубликовать ошибку от ruby:

false
sh: bash --login -c 'echo $PATH &>/dev/null': No such file or directory

2.Это работает в ruby, я бы вручную вводил команду ssed, но я не слишком уверен, как избежать этого, я попытался скопировать и вставить вывод из escape-камня ниже, но безрезультатно:

p %x[bash --login -c 'echo $PATH &>/dev/null; wget --quiet -O - http://www.google.com | grep 'schema.org'']
...