2011-12-13 22 views
6

Ruby'yi kullanarak bir komut satırı aracı yapıyorum. Ekranda çok fazla metin basacaktır. Şu anda, bunu yapmak için kabuk boru hattı (may_app | more) kullanıyorum. Ama bence varsayılan bir çağrı cihazına sahip olmak daha iyi.Çağrı cihazı ile ruby ​​komut satırı uygulaması nasıl yapılır?

Bu, git log'u çalıştırırken gördüğünüz gibi. Bir çağrı cihazı git --nopager log kullanarak devre dışı bırakılabilir.

Çok fazla iş yaptım ve bir mücevher buldum: hirb, ama biraz aşırı gibi görünüyor.

birçok denemeden sonra, bunu yapmaya kabuk sargısı kullanarak mevcut değilim:

#!/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 

Çalışıyor. Ama daha iyi bir yolu var mı?

cevap

3

Doğru yapıyorsunuz. Ancak bunun yerine more'u kullanarak, varsa $PAGER ortam değişkeninden bir çağrı almalısınız. Örneğin, bazı kullanıcılar'u more numaralı telefona tercih eder, bazıları ise bu varyasyonda en sevdikleri çözümleyici seçeneklerini kullanır.

+0

İyi tavsiyeler! Teşekkürler, Zed. – qhwa

2

Öyle gibi system çağrı yoluyla Ruby içinde boru kullanıp (güzel yardım arayüzü ile birlikte) seçenekleri sağlayabiliriz:

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 

Şimdi, komut satırında --pager ve --no-pager destekleyen, bu güzel bir şey.

+0

Bu istediğimden farklı. Çağrı cihazını sistemden çıkarmak istiyorum. – qhwa

İlgili konular