スクリプト言語により生活を楽にする
こういう「プロファイラを実行してプログラムを動かし、プロファイラを停止して結果に適当な名前を付けて保存する」みたいな決まりきった形の一連の作業はスクリプト一つにまとめましょう。
「何か一つスクリプト言語を身に付けろ」と言う方が多いですけどそういうことです。
#!/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で褒められるのは小学生までです。
ほんの少しのスクリプトで生活が激変! て書こうと思ったんだけどなんかあれこれ追加したら意外と長くなってしまった。