2011-12-13 12 views
6

Estoy haciendo una herramienta de línea de comandos usando Ruby. Imprimirá una gran cantidad de texto en la pantalla. Actualmente, estoy usando shell pipeline (may_app | more) para hacerlo. Pero creo que es mejor tener un buscapersonas predeterminado.¿Cómo hacer una aplicación de línea de comando de ruby ​​con buscapersonas?

Es exactamente como lo que ve al ejecutar git log. Se puede deshabilitar el buscapersonas usando git --nopager log.

He hecho bastante trabajo de google y encuentro una gema: hirb, pero parece un poco exagerado.

Después de muchos intentos, estoy usando envoltura del shell actual para hacerlo:

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

Funciona. Pero hay una manera mejor?

Respuesta

3

Lo estás haciendo bien. Pero en su lugar usando more es mejor que obtenga un buscapersonas de la variable de entorno $PAGER, si corresponde.

Algunas personas prefieren less a more por ejemplo, y otras tienen sus opciones de analizador favoritas establecidas en esta var.

+0

¡Buen consejo! Gracias, zed. – qhwa

2

Usted puede utilizar el tubo en Ruby a través de una llamada a system y proporcionar las opciones (junto con una interfaz de ayuda agradable), así:

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 

Ahora, que apoyan --pager y --no-pager en la línea de comandos, lo cual es bueno de hacer

+0

Esto es diferente de lo que quiero. Quiero usar pager fuera de 'system'. – qhwa

Cuestiones relacionadas