在“打开”命令之前管道符号

时间:2014-01-10 14:56:29

标签: ruby

我偶然发现了以下代码行

open("|cd lib && /opt/jruby/bin/jruby jasper_pdf.rb") { |input| open("log/jasper_pdf.log", "w") { |f| f.write(input.read) } }

cd命令之前的管道符号是什么?

1 个答案:

答案 0 :(得分:2)

Kernel#open的Ruby文档说:

  

如果path以管道符开头(" |"),则创建一个子进程,   通过一对管道连接到呼叫者。返回的IO对象可以   用于写入标准输入并从标准读取   此子流程的输出。

在您的情况下,它用于将命令/opt/jruby/bin/jruby jasper_pdf.rb生成的进程的输出记录到文件log/jasper_pdf.log

大致相当于使用Open3模块,如下所示:

require 'open3'
Open3.popen2e('cd lib && /opt/jruby/bin/jruby jasper_pdf.rb') do |_, output, _|
  open('log/jasper_pdf.log', 'w') do |f|
    f.write(output.read)
  end
end