Одиночные кавычки, выходящие из Ruby - PullRequest
0 голосов
/ 02 октября 2018

Итак, я работаю со сценарием Ruby, который должен подключаться к нескольким серверам и получать от них информацию.У меня проблема в том, что одиночные кавычки как-то теряются.Что я здесь не так делаю?

command = "grep -E \'^(upstream| *server)\'  /etc/nginx/upstreams.conf | sed -E \'s/_pool.*//g ; s/^upstream //g\'"

puts system("ssh -n   -o 'StrictHostKeyChecking no' #{nginx_stage_servers[0]} #{command}")

Ошибка, которую я получаю:

 $ ruby nx.rb
bash: -c: line 0: syntax error near unexpected token `('
bash: -c: line 0: `grep -E ^(upstream| *server) /etc/nginx/upstreams.conf'
true

Причина ошибки - отсутствие одинарных кавычек.

1 Ответ

0 голосов
/ 02 октября 2018

При использовании system(command_string) у вас слишком много слоев цитирования и экранирования, чтобы иметь дело с ними, вам почти всегда лучше использовать форму с несколькими аргументами Kernel#system, чтобы избежатьракушка.Примерно так будет меньше проблем:

system('ssh', '-n', '-o', 'StrictHostKeyChecking no', nginx_stage_servers[0], command)
...