如何使用寻呼机制作ruby命令行应用程序?

时间:2011-12-13 12:04:12

标签: ruby command-line pager

我正在使用Ruby制作命令行工具。它会在屏幕上打印很多文字。目前,我正在使用shell管道(may_app | more)来执行此操作。但我认为最好有一个默认的寻呼机。

就像执行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

有效。但是有更好的方法吗?

2 个答案:

答案 0 :(得分:3)

你做得对。但是如果使用more,最好从$PAGER环境变量中获取寻呼机。

有些人更喜欢lessmore,而其他人则在此var中设置了他们最喜欢的解析器选项。

答案 1 :(得分:2)

您可以通过调用system在Ruby中使用管道并提供选项(以及一个很好的帮助界面),如下所示:

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,这很好。