2011-06-09 57 views
1

我想在ruby中使用命令行命令創建一個像管道一樣的shell腳本。所以我在流水線中有幾個步驟,每一步都是一個命令行(如使用特定工具和通常的輸入和輸出文件,如運行xtool -i xx -o xxx)。如何在ruby中編寫命令行管道

在此先感謝

馬克

+0

所以剛剛完成我的消息,任何人有任何想法如何做到這一點? – Mark 2011-06-09 14:01:02

+1

這很容易混淆,你的意思是說'xtool -i xx -o xxx'就等同於'xx | xxx'? – basicxman 2011-06-09 14:08:28

+0

我的_guess_是@Mark詢問如何編寫Ruby腳本,這些腳本優雅地消耗輸入並以可鏈接在一起的方式產生輸出。 (但是這個問題還不清楚。) – Phrogz 2011-06-09 16:17:38

回答

3

您可以通過使用反引號引用或使用%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

0

很難知道你在問什麼,但如果你要編寫能夠在命令行上的管道上使用,也可能是使用命令行參數的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 
0

您還有shsystem內核方法。您可以編寫自己的shell腳本並使用system('yourscript.sh')來調用它。

system如果該命令給出零退出狀態,則返回true,否則返回false。