2011-12-13 22 views
6

我正在使用Ruby製作命令行工具。它會在屏幕上打印很多文字。目前,我正在使用shell管道(may_app | more)來執行此操作。但我認爲最好有一個默認的尋呼機。如何使用pager製作ruby命令行應用程序?

這就像執行git log時看到的一樣。可以使用git --nopager log禁用尋呼機。

我已經做了相當多的谷歌工作,並找到一個寶石:hirb,但它似乎有點矯枉過正。

多次嘗試後,我當前使用shell包裝這樣做:

#!/bin/bash 

# xray.rb is the core script 
# doing the main logic and will 
# output many rows of text on 
# screen 
XRAY=$HOME/fdev-xray/xray.rb 

if [ "--nopager" == "$1" ]; then 
    shift 
    $XRAY $* 
else 
    $XRAY $* | more 
fi 

它的工作原理。但是有更好的方法嗎?

回答

3

你做得對。但是,如果使用more,則最好從$PAGER環境變量中獲得尋呼機。

例如,有些人更喜歡lessmore,而其他人則在此var中設置了他們喜歡的解析器選項。

+0

很好的建議!謝謝,澤德。 – qhwa

2

您可以通過調用中使用Ruby中管system和提供的選項(用一個漂亮的幫助界面一起),像這樣:

require 'optparse' 

pager = ENV['PAGER'] || 'more' 

option_parser = OptionParser.new do |opts| 
    opts.on("--[no-]pager", 
      "[don't] page output using #{pager} (default on)") do |use_pager| 
    pager = nil unless use_pager 
    end 
end 

option_parser.parse! 

command = "cat #{ARGV[0]}" 
command += " | #{pager}" unless pager.nil? 
unless system(command) 
    STDERR.puts "Problem running #{command}" 
    exit 1 
end 

現在,你在命令行上支持--pager--no-pager,這很好做。

+0

這與我想要的不同。我想使用'system'以外的尋呼機。 – qhwa

相關問題