0
点赞
收藏
分享

微信扫一扫

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

飞鸟不急 2022-03-11 阅读 49


最主要的是使用seek这个命令,从文件的末尾开始读字符。读到一个换行符 \n 之后,计数器加一,直到找到符合要求的行数后,读内容到文件末尾输出。支持 –f 部分的想法是,在文件最后的位置不断地循环读,发现新内容后就进行输出。

脚本存在的问题:不支持多个文件,tail命令本身是可以支持的;不断循环的效率太低,应该有更好的办法可以优化。


 1 #!/usr/bin/ruby

 2 

 3 line = ARGV[0]

 4 filename = ARGV[1]

 5 

 6 unless line && filename then

 7     print "Invalid parameter.\n"

 8     print "Usage:ruby tail.rb line filename\n"

 9 end

10 line = line.to_i

11 

12 begin

13     io = open(filename)

14     n = 0

15     lc = 0

16     stack = Array.new

17 

18     while lc < line + 1 do

19         n = n + 1

20         io.seek( -n, IO::SEEK_END )

21         if io.pos == 0 then

22             break

23         end

24         #break unless io.seek( -n ,IO::SEEK_END)

25         s = io.read( 1 )

26         if /\n/ =~ s then

27             lc = lc + 1

28         end

29     end

30 

31     io.seek(-n, IO::SEEK_END)

32     s = io.read()

33     last = io.pos

34     print s

35 

36     while item = io.read() do

37         if ! item.empty? then

38             print item

39             last = io.pos

40         else

41             io.pos = last

42         end

43     end

44 rescue

45     print $@, "\n"

46 end




举报

相关推荐

0 条评论