Ruby Backticks - разбить команду на несколько строк?

В Ruby я знаю, что могу выполнить команду оболочки с обратными галочками, например:

`ls -l | grep drw-`

Тем не менее, я работаю над сценарием, который вызывает несколько довольно длинных команд оболочки, и для удобства чтения я бы хотел разбить его на несколько строк. Я предполагаю, что не могу просто добавить знак плюса, как в случае со строками, но мне любопытно, есть ли метод конкатенации команд другого способа для чистого разбиения длинной командной строки на несколько строк исходного кода.

4 ответа

Решение

Вы можете использовать интерполяцию:

`#{"ls -l" +
   "| grep drw-"}`

или поместите команду в переменную и интерполируйте переменную:

cmd = "ls -l" +
      "| grep drw-"
`#{cmd}`

В зависимости от ваших потребностей вы также можете использовать другой метод запуска команды оболочки, например: system, но обратите внимание, что его поведение не совсем то же самое, что и обратная связь.

Вы можете избежать возврата каретки с \:

`ls -l \
 | grep drw-`

Использование %x:

%x( ls -l |
    grep drw- )

Другая:

%x(
  echo a
  echo b
  echo c
)
# => "a\nb\nc\n"

Вы также можете сделать это с явным \n:

cmd_str = "ls -l\n" +
          "| grep drw-"

... и затем поместите объединенную строку в кавычки.

`#{cmd_str}`
Другие вопросы по тегам