如何将变量传递给ruby中的system()调用?

假设我在变量some​​_var中有一堆文本,几乎可以是任何东西.

some_var = "Hello,I'm a \"fancy\" variable | with a pipe,double- and single-quotes (terminated and unterminated),and more."

我们还要说,在CLI Ruby应用程序中,我想允许用户将该文本传递给任何Unix命令.我允许他们输入像some_var一样的东西espeak -a 200 -v en-us,其中管道右侧的命令是安装在其系统上的任何unix CLI工具.

我们还要说我已经将变量选择和管道分离出来了,所以我确切地知道管道后面的命令是100%. (在这种情况下,我想将变量的内容传递给espeak -a 200 -v en-us.)

我该怎么做?我认为我不能使用反引号方法或%x []文字.我试过做以下事情……

system("echo '#{some_var}' | espeak -a 200 -v en-us")

…但是任何特殊字符搞砸了,我无法删除特殊字符.我该怎么办?

解决方法

哦,快乐的注射.您正在寻找
IO.popen.

IO.popen('grep ba','r+') {|f| # don't forget 'r+'
  f.puts("foo\nbar\nbaz\n") # you can also use #write
  f.close_write
  f.read # get the data from the pipe
}
# => "bar\nbaz\n"

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...