[使用Ruby简单实现的tail命令,支持动态输出]

使用Ruby简单实现的tail命令,支持动态输出

#!/usr/bin/ruby

line = ARGV[0]
filename = ARGV[1]

unless line && filename then
    print "Invalid parameter.\n"
    print "Usage:ruby tail.rb line filename\n"
end
line = line.to_i

begin
    io = open(filename)
    n = 0
    lc = 0
    stack = Array.new

    while lc < line + 1 do
        n = n + 1
        io.seek( -n, IO::SEEK_END )
        if io.pos == 0 then
            break
        end
        #break unless io.seek( -n ,IO::SEEK_END)
        s = io.read( 1 )
        if /\n/ =~ s then
            lc = lc + 1
        end
    end

    io.seek(-n, IO::SEEK_END)
    s = io.read()
    last = io.pos
    print s

    while item = io.read() do
        if ! item.empty? then
            print item
            last = io.pos
        else
            io.pos = last
        end
    end
rescue
    print $@, "\n"
end

测试

ruby tail.rb 10 /var/log/td-agent/td-agent.log 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,957评论 19 139
  • 一、异同对比选择1、Python和ruby的相同点: * 都强调语法简单,都具有更一般的表达方式。python是缩...
    沃伦盖茨阅读 4,200评论 2 24
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,387评论 25 708
  • 不知道是出于怎样一个机缘,或者是在哪看到的介绍推荐,《消失的地平线》这本书就在我的购物车中,正好碰到亚马逊搞活动,...
    租了五颗星阅读 329评论 0 0
  • 一:张弛有度,重视工作结束的时间和计划什么时间工作同样重要。合理安排时间,平衡工作与生活,让时间更高效。 二:老...
    郑公子vega阅读 147评论 0 1