将数据管道化到命令

时间:2014-09-24 11:53:26

标签: ruby

在下文中,我尝试将数据传输到shell命令中。

$ irb
> IO.popen("echo <<EOF", mode="r+") {|io| io.write("hello worldEOF"); io.close_write; result=io.read; }
 => "\n" 

我希望输出是&#39; hello world&#39;。

为什么我会将换行符作为输出?

2 个答案:

答案 0 :(得分:1)

echo不读取stdin的输入。使用cat

IO.popen("cat", mode="r+") { |io|
  io.write("hello world\n")
  io.close_write
  result = io.read
}
# => "hello world\n"

答案 1 :(得分:0)

  

我希望输出是&#39; hello world&#39;。

您对以下产品的期望是什么?

$ echo <<EOF
> hello world
> EOF

(虽然,您的代码甚至无法实现这一目标。)

在尝试使用ruby执行它之前,确保shell命令在shell中工作可能是个好主意。