我想在ruby中使用命令行命令創建一個像管道一樣的shell腳本。所以我在流水線中有幾個步驟,每一步都是一個命令行(如使用特定工具和通常的輸入和輸出文件,如運行xtool -i xx -o xxx)。如何在ruby中編寫命令行管道
在此先感謝
馬克
我想在ruby中使用命令行命令創建一個像管道一樣的shell腳本。所以我在流水線中有幾個步驟,每一步都是一個命令行(如使用特定工具和通常的輸入和輸出文件,如運行xtool -i xx -o xxx)。如何在ruby中編寫命令行管道
在此先感謝
馬克
您可以通過使用反引號引用或使用%X上運行外部程序:
x = `echo "hello"`
y = %x{echo "hello"}
你可以看一下過去的過程中,通過$?
:
`rm an_existing_file`
$?.exitstatus # now: o
`rm missing_file`
$?.exitstatus # now: 1
如果您需要做更多補充x,看看Ruby Process Docs。
很難知道你在問什麼,但如果你要編寫能夠在命令行上的管道上使用,也可能是使用命令行參數的Ruby的命令行應用程序,你可以這樣做:
require 'optparse'
input = STDIN
output = STDOUT
option_parser = OptionParser.new do |opts|
options.on("-i FILE","Input file (defaults to stdin)") do |filename|
input = File.new(filename)
end
options.on("-o FILE","Output file (defaults to stdout)") do |filename|
output = File.new(filename,'w')
end
end
option_parser.parse!
input.readlines.each do |line|
# do something with line
output.puts "Some awesome output"
end
output.close # NOTE, this must be the last line of your program since
# you are possibly closing the standard output
您還有sh
和system
內核方法。您可以編寫自己的shell腳本並使用system('yourscript.sh')
來調用它。
system
如果該命令給出零退出狀態,則返回true,否則返回false。
所以剛剛完成我的消息,任何人有任何想法如何做到這一點? – Mark 2011-06-09 14:01:02
這很容易混淆,你的意思是說'xtool -i xx -o xxx'就等同於'xx | xxx'? – basicxman 2011-06-09 14:08:28
我的_guess_是@Mark詢問如何編寫Ruby腳本,這些腳本優雅地消耗輸入並以可鏈接在一起的方式產生輸出。 (但是這個問題還不清楚。) – Phrogz 2011-06-09 16:17:38