#!/usr/bin/ruby
# timer.rb

MARKERS = "|~^=-()\'&%$#\"!+*;:@`[]{}|<>,.?_@"
#MARKERS = ".:"
#MARKERS = "bdpq"
#MARKERS = "QO"
#MARKERS = "zzzZ"
#MARKERS = "..........oooO"
#MARKERS = "--------------------------------+*"
#MARKERS = "                                +*"
#MARKERS = "2Z"

GOAL = ARGV.size.zero? ? 30 : ARGV.shift.to_i
START = Time.now
loop do
  progress = (Time.now - START).to_i
  print "\r|"
  progress.times do
    print MARKERS[rand(MARKERS.size)].chr
  end
  print "| #{progress}"
  STDOUT.flush
  break if progress >= GOAL
  sleep 0.03
end
puts "\a"
% ruby timer.rb 20

ストップウォッチが必要になったので書きました。
MARKERS をいろいろ変えてみるとちょっとたのしい。