2011-12-13 5 views
6

私はRubyを使ってコマンドラインツールを作っています。これは、画面上に多くのテキストを印刷します。現在、シェルパイプライン(may_app | more)を使用しています。しかし、私はそれがデフォルトのページャを持っている方が良いと思います。ページャーでRubyコマンドラインアプリケーションを作成するには?

git logを実行したときと同じです。 git --nopager logを使用してページャを無効にすることができます。

私は非常に多くのGoogleの仕事をして、1つの宝石を見つけました:hirb、それはちょっと残酷すぎます。

多くの試行の後、私はそうするように、シェルラッパーを使用して、現在のよ:

#!/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に好きなパーサーオプションが設定されている人もいます。あなたがそうのような(素敵なヘルプインタフェースと一緒に)systemに呼び出しを介してRubyでパイプを使用して、オプションを提供することができます

+0

良いアドバイス!ありがとう、zed。 – qhwa

2

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

これは私が望むものとは異なります。私は 'システム'からページャーを使いたい。 – qhwa

関連する問題