Ruby 将var设置为系统调用输出并抑制控制台显示

Ruby 将var设置为系统调用输出并抑制控制台显示,ruby,Ruby,我需要为命令行调用的输出设置一个变量,但不向控制台显示该信息。比如说 output = `echo asdf` 但实际上不向控制台显示“asdf”或“echo asdf”。这可能吗?按如下方式启动IRB: kirti@kirti-Aspire-5733Z:~$ irb --noecho 2.0.0p0 :001 > output = `echo asdf` 2.0.0p0 :002 > output 2.0.0p0 :003 > puts output asdf 2.0.0p

我需要为命令行调用的输出设置一个变量,但不向控制台显示该信息。比如说

output = `echo asdf`

但实际上不向控制台显示“asdf”或“echo asdf”。这可能吗?

按如下方式启动IRB:

kirti@kirti-Aspire-5733Z:~$ irb --noecho
2.0.0p0 :001 > output = `echo asdf`
2.0.0p0 :002 > output
2.0.0p0 :003 > puts output
asdf
2.0.0p0 :004 > 
在REPL中返回Nil 使用irb或pry时,行上的最后一个表达式是REPL循环打印到控制台的唯一表达式。例如:

output = %x(echo asdf); nil
# => nil
您可以使用它来抑制控制台的输出,但实际上并没有添加任何真正的安全性,因为(根据定义)控制台上的人员可以访问REPL中的任何可用变量。因此:

output = %x(echo foo); nil
# => nil
output
# => "foo\n"
用Pry不返回任何内容 使用pry,可以将分号作为行中的最后一项。例如:

[1] pry(main)> output = `echo asdf`;
[2] pry(main)> 
这适用于pry,但不适用于irb。您的里程数可能因此技术而异