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

时间:2013-09-09 18:14:17

标签: ruby

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

output = `echo asdf`

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

2 个答案:

答案 0 :(得分:1)

在REPL中返回Nil

使用irb或pry时,行上的最后一个表达式是REPL循环打印到控制台的唯一表达式。例如:

output = %x(echo asdf); nil
# => nil

您可以使用它来抑制输出到控制台,但您实际上并没有添加任何真正的安全性,因为(根据定义)REPL中可用的任何变量都可供控制台上的人员访问。因此:

output = %x(echo foo); nil
# => nil
output
# => "foo\n"

没有Pry

使用pry,你可以通过在一行中的最后一项使用分号来disable output altogether。例如:

[1] pry(main)> output = `echo asdf`;
[2] pry(main)> 

这适用于撬,但不适用于irb。您的里程可能因此而异。

答案 1 :(得分:0)

按如下方式启动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 >