在终端中打开一个文本文件,并在更改后自动刷新它


15

每次更改时,如何在终端中打开具有即时自动刷新功能的文本文件?

我看vim:set autoread,但它需要一些基本的输入(如按键内vim),以触发刷新。

我希望自动刷新免提。是否有一些技巧可以做到这一点?

我正在使用Crunchbang 11,但对终端非常满意。


那有什么用?这个文件是关于什么的?如果是日志,通常在底部添加新行,则可以使用tail -f $file
jirib

具体来说,我正在编写一个Python脚本,该脚本可以写出另一个文本文件,而不仅仅是在底部添加新行。我想监视该文本文件。
2013年

变声.......?
jirib

我不熟悉inotify。查找它,这是我需要通过C编程访问的API,我不打算在不久的将来这样做。我正在寻找一个shell命令解决方案。
套件

1
您可以从命令行使用一组工具,通常称为inotify-tools。这些使用内核中内置的称为inotify的功能。每当对事件执行文件操作时,都会通过inotify发送可以执行的事件。许多编。郎。例如Python,Perl等,都有包装Inotify API的库。参见维基百科pg:en.wikipedia.org/wiki/Inotify
slm

Answers:


27

这应该每秒显示一次文件:

watch -n 1 cat file

1
这就是我要的东西。谢谢!我通过watch -tpcn 1 pygmentize -g filename
Kit

@Kit小心翼翼watch -g,它没有按您期望的那样工作
terdon

@terdon,该-g开关实际上用于pygmentize。无论如何,感谢您的警告。
工具包

如果文件内容超过一页,则无法使用该页面滚动屏幕来检查文件的其余内容。
CodyChan

1
为什么不只是watch -n 1 tail file
Varun

8
tail -f /var/log/syslog

显示将它们添加到文件中的系统日志更新。


显示正确添加的行吗?OP需要完全刷新。
Sean256 '19

也可以在带有git-bash的Windows上工作
David

3

我将用watch另一个答案来说明问题,但只是向您展示如何使用诸如Unix之类的shell提供的构件来解决看似复杂的问题。while循环可能是执行循环的一种简单方法。

$ while [ 1 ]; do clear; date; cat <afile>; sleep 1 ;done

$ while [ 1 ]; do clear; date; cat sample.txt; sleep 1 ;done
Fri Nov 15 09:17:39 EST 2013
1
2
3
4
5

屏幕将清除,然后一秒钟后将显示:

Fri Nov 15 09:17:40 EST 2013
1
2
3
4
5

2

正如评论中所建议的那样,您也可以使用inotify它,尽管它是过大的。到目前为止,最简单的方法是使用watch。这是一种解决方法inotify

  1. 安装inotify-tools套件

    sudo apt-get install inotify-tools
    
  2. 使用inotifywatch来查看文件更改。cat如果检测到更改,则在文件中循环运行它(这就是为什么我grep要输入字符串total):

    while true; do 
      inotifywatch -e modify -t 1 kk 2>/dev/null | grep -q total && 
      echo "$(date;cat kk)"; 
    done
    

传递-q(或--quietgrep将使匹配的行“合计”静音。
FichteFoll

@FichteFoll好点(如果您在删除之前看到了它,请忽略我以前的评论,我很慢)。谢谢,编辑。
terdon

0

watch(1)是一个非常有用的工具。[1]

我不建议使用cat虽然。

而是使用headtail来表示是否需要查看文件的开头或结尾。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.