2
我偶然在下面的代碼行管道符號
open("|cd lib && /opt/jruby/bin/jruby jasper_pdf.rb") { |input| open("log/jasper_pdf.log", "w") { |f| f.write(input.read) } }
什麼是cd命令之前管道符號?
我偶然在下面的代碼行管道符號
open("|cd lib && /opt/jruby/bin/jruby jasper_pdf.rb") { |input| open("log/jasper_pdf.log", "w") { |f| f.write(input.read) } }
什麼是cd命令之前管道符號?
爲Kernel#open
紅寶石文檔說:
如果路徑與管道字符(「|」)開始,創建子進程, 由一對配管的連接到主叫方。返回的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
http://ruby-doc.org/core-2.1.0/Kernel.html#method-i-open – matt