2011-12-13 6 views
6

मैं रुबी का उपयोग कर कमांड लाइन टूल बना रहा हूं। यह स्क्रीन पर बहुत सारे पाठ प्रिंट करेगा। वर्तमान में, मैं ऐसा करने के लिए खोल पाइपलाइन (may_app | more) का उपयोग कर रहा हूं। लेकिन मुझे लगता है कि एक डिफ़ॉल्ट पेजर होना बेहतर है।पेजर के साथ रूबी कमांड लाइन एप्लिकेशन कैसे बनाएं?

यह git log निष्पादित करते समय आप जो देखते हैं उसके समान ही है। कोई git --nopager log का उपयोग कर पेजर को अक्षम कर सकता है।

मैंने काफी Google काम किया है और एक मणि ढूंढ लिया है: 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 में उनके पसंदीदा पार्सर विकल्प सेट हैं।

+0

अच्छी सलाह! धन्यवाद, जेड। – qhwa

2

तुम इतनी तरह 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

यह जो मैं चाहता हूं उससे अलग है। मैं पेजर से बाहर पेजर का उपयोग करना चाहता हूं। – qhwa

संबंधित मुद्दे