我正在使用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
有效。但是有更好的方法吗?
答案 0 :(得分:3)
你做得对。但是如果使用more
,最好从$PAGER
环境变量中获取寻呼机。
有些人更喜欢less
到more
,而其他人则在此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
,这很好。