irbからシェルのコマンドを実行

たぶん既出だと思うけど自分のためにもメモ。

.irbrcにmethod_missingを定義してコマンドを実行させるとIRBからちょっとした確認が出来て便利。

module Kernel
  def method_missing(meth_sym, *arg, &block)
    str = `#{meth_sym.to_s} #{arg.join " "}`
    if str == ""
      raise NoMethodError
    else
      puts str
    end
  end

  private :method_missing
end

実行例はこんな感じ。

pwd
/home/walf443
  #=> nil

hoge
(irb):3: command not found: hoge 
NoMethodError: NoMethodError
        from /home/walf443/.irbrc:52:in `method_missing'
        from (irb):3

"abc".hoge
(irb):5: command not found: hoge 
NoMethodError: NoMethodError
        from /home/walf443/.irbrc:52:in `method_missing'
        from (irb):5

"abc".hogeにもKernel#method_missingが効いてるのとcommand not foundが出てるのがちょい気に入らない・・・。

ただtypoでうっかり知らないコマンド引き当てちゃったりするかもしれないので諸刃の剣かも。使う際にはご注意ください。それから補完などが効かないのでシェルの方がやっぱり良いかもしれません。