Rubyで簡単にエスケープシーケンスによる色付け→timestampスクリプト改良

エスケープシーケンスで色をつけるのは端末アプリケーションだと定番だ。
Rubyで色つき文字を出す場合、わざわざエスケープシーケンスを書く必要はない。Term::ANSIColorというライブラリを使えばいい。

インストールは「gem install term-ansicolor」で。

require 'term/ansicolor'
class String
  include Term::ANSIColor
end

というコードを入れておけば、文字列に色名メソッドなどが定義されててわかりやすく記述できるぞ。こんなふうに。

print "red bold".red.bold, "\n"

timestampコマンドを色付きにしてみる

[update] <2010-03-30 火> シグナルで終了したときには、プロセスオブジェクトを表示してみた。

任意のプログラムを実行するとき開始/終了時のタイムスタンプを出力する方法 - http://rubikitch.com/に移転しましたで紹介したtimestampコマンドに色をつけてみる。開始時刻・終了時刻・経過時間・終了ステータスを表示する。

#!/usr/local/bin/ruby191
require 'term/ansicolor'
class String
  include Term::ANSIColor
end

start_time = Time.now
cmdline = ARGV.join ' '
$stderr.puts ("=" * 60).green
$stderr.puts "#{Time.now} start: #{cmdline.red}"
$stderr.puts `free`
$stderr.puts "-" * 60

system *ARGV

secs = Time.now - start_time
$stderr.puts "+" * 60
$stderr.puts $?.inspect if $?.signaled?
$stderr.puts "#{Time.now} end: #{cmdline.red}"
$stderr.puts ("%.2f seconds" % secs).yellow
$stderr.puts "exitstatus = #{$?.exitstatus}"
$stderr.puts ("-" * 60).green

[2009/12/30]追記

カラー化されたtimestampコマンドにcronのログを取らせると、かなりログが見やすくなった。やっぱり色の効果は絶大だ。