【问题标题】:Ruby Backticks - break command into multiple lines?Ruby Backticks - 将命令分成多行?
【发布时间】:2012-04-03 17:41:26
【问题描述】:

在 Ruby 中,我知道我可以执行带有反引号的 shell 命令,如下所示:

`ls -l | grep drw-`

但是,我正在编写一个脚本,它需要一些相当长的 shell 命令,为了便于阅读,我希望能够将它分成多行。我假设我不能像使用字符串那样只输入加号,但我很好奇是否有其他方式的命令连接技术可以将长命令字符串干净地分解为多行源代码。

【问题讨论】:

  • 就个人而言,如果我需要调用一些较长的 shell 命令,我会将它们放入一个 shell 脚本中,然后调用它并捕获它的输出。我宁愿将 shell 脚本与我的 Ruby 代码分开维护。

标签: ruby shell backticks


【解决方案1】:

您可以使用\ 转义回车:

`ls -l \
 | grep drw-`

【讨论】:

  • 这就是我要找的。​​span>
【解决方案2】:

你可以使用插值:

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

或者将命令放入一个变量中,然后对变量进行插值:

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

根据您的需要,您也可以使用different method of running the shell command,例如system,但请注意其行为与反引号并不完全相同。

【讨论】:

  • 谢谢,我认为这会很简单,但我无法形成我的谷歌查询来获取有意义的东西。
【解决方案3】:

使用%x:

%x( ls -l |
    grep drw- )

另一个:

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

【讨论】:

  • 请注意,管道 (|) 必须位于第一行的末尾,而不是第二行的开头。
【解决方案4】:

您也可以使用明确的\n 来做到这一点:

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

...然后将组合字符串放在反引号内。

`#{cmd_str}`

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 2015-12-26
    • 2014-07-06
    • 2016-05-20
    • 2020-05-14
    • 1970-01-01
    • 2011-03-10
    相关资源
    最近更新 更多