スクリプト言語により生活を楽にする

こういう「プロファイラを実行してプログラムを動かし、プロファイラを停止して結果に適当な名前を付けて保存する」みたいな決まりきった形の一連の作業はスクリプト一つにまとめましょう。
「何か一つスクリプト言語を身に付けろ」と言う方が多いですけどそういうことです。

#!/usr/bin/env ruby
def which(exec)
    `which #{exec}`.chomp
end
def exit_on_execerr(*args)
    puts "# #{args.join(' ')}"
    if !system(*args)
        STDERR.puts "fail: #{args.join(' ')}"
        exit 1
    end
end
def execute(*args)
    puts "# #{args.join(' ')}"
    system(*args)
end

SUDO        = which 'sudo'
CONTROL     = which 'opcontrol'
REPORT      = which 'opreport'
ANNOTATE    = which 'opannotate'
EXEC        = which ARGV[0]

opts = {}
ARGS        =
    if ARGV.length > 1
        ARGV[1..-1].reject!{|x|
            if x =~ /^--(\w+)(?:=(.+))?$/
                opts[$1] = $2 || true
                true
            else
                false
            end
        }
    else
        []
    end

if !FileTest.executable?(EXEC)
    STDERR.puts "#{ARGV[0]} is not executable"
    exit 1
end

report = opts['report'] || 'report'
if opts['event']
    exit_on_execerr(SUDO, CONTROL, "--event=#{opts['event']}")
end

exit_on_execerr(SUDO, CONTROL, "--image=#{EXEC}")
exit_on_execerr(SUDO, CONTROL, '--shutdown')
exit_on_execerr(SUDO, CONTROL, '--reset')
exit_on_execerr(SUDO, CONTROL, '--start')
execute(EXEC, *ARGS)
exit_on_execerr(SUDO, CONTROL, '--stop')

[
    ['report', [REPORT, EXEC]],
    ['report.l', [REPORT, '-l', EXEC]],
    ['annotate.as', [ANNOTATE, '-as', EXEC]],
    ['annotate.a', [ANNOTATE, '-a', EXEC]],
    ['annotate.s', [ANNOTATE, '-s', EXEC]],
].each{|array|
    ext, args = array
    puts "# #{args.join(' ')}"
    File.open("#{report}.#{ext}", 'w') do |file|
        file.print `#{args.join(' ')}`
        file.flush
    end
}

# vim: sw=4 ts=4 et:

unlimited tanpopo putting worksで褒められるのは小学生までです。


ほんの少しのスクリプトで生活が激変! て書こうと思ったんだけどなんかあれこれ追加したら意外と長くなってしまった。

test