在Ruby中包含分号的Exec系统命令

时间:2017-07-05 14:29:58

标签: ruby

似乎是一个愚蠢的问题,但我很难找到答案。

我需要直接从ruby代码执行一个非常长的命令到shell,这个命令必须包含一个;字符。

如果我尝试使用\;来逃避它,则无效,如果我尝试将其替换为\%3b,则会执行,但不会将%3b替换为; },所以它也不起作用。

我尝试了execsystem,`#{str}`,我无法使其发挥作用。它总是分成两个我的命令。

1 个答案:

答案 0 :(得分:1)

只要您正确引用分号,就可以在shell命令中放置分号没有问题:

system('cat file | grep ";"')
# => someline with a ; in it

system("cat #{a_variable} | grep ';'")
# => this will work as well for finding ;

我还发现Open3模块更容易用于奇怪的系统调用/引用问题(但是它也可能有点难以运行 - 权衡):

require 'open3'
cmds = %w(grep ';' a_file)
stdout, status = Open3.capture2(*cmds)