rubyでtail -fみたいな処理
必要に迫られ、書いてみた。
#!/usr/bin/env ruby # -*- coding: utf-8 -*- # def tail(filepath) fpointer = 0 f = open(filepath) f.seek(-32, IO::SEEK_END) # 末尾から32byteから開始(要調整) begin while true puts f.readline fpointer = f.pos end rescue EOFError f.close unless f.closed? # 更新を検知するまで待つ closetime = File.mtime(filepath) while (File.mtime(filepath) == closetime) sleep 0.5 end f = open(filepath) f.seek(fpointer, IO::SEEK_SET) retry end end file = ARGV.shift #puts file tail(file)
もっと短く書けると思う。
と思って探したら
Subject: [ruby-list:26301] Re: tail -f のように読み続ける方法は?
というのを見つけた。