我想在文件内容发生变化时输出它们,例如,如果我有该文件foobar
并且我这样做:
magic_command foobar
当前终端应该显示文件的内容并且等待直到我不知道,我按了^C。
然后,如果从另一个终端我这样做:
echo asdf >> foobar
除了原始文件内容之外,第一个终端还应该显示新添加的行(当然,考虑到我没有按 ^C)。
答案1
您可以tail command
使用-f
:
tail -f /var/log/syslog
这是实时显示的好解决方案。
答案2
如果您想显示一个适合一个终端屏幕的短文件,并且正在更改的可能是整个文件,您可以使用watch
:
watch cat example.txt
Every 2.0s: cat example.txt Sun Aug 3 15:25:20 2014
Some text
another line
默认情况下,它每 2 秒显示一次整个文件,包括可选的标头:
选项-d
( --differences
) 将突出显示输出的先前版本或第一个版本的更改。
答案3
less
有一个类似于tail -f
-F
打开时点击即可的跟随模式。
答案4
我有三个解决方案:
1) tail -f
是个好主意
2)我们还必须tailf
使用
3)第三个是 bash 脚本:
#!/bin/bash
GAP=10 #How long to wait
LOGFILE=$1 #File to log to
if [ "$#" -ne "1" ]; then
echo "USAGE: `basename $0` <file with absolute path>"
exit 1
fi
#Get current long of the file
len=`wc -l $LOGFILE | awk '{ print $1 }'`
echo "Current size is $len lines."
while :
do
if [ -N $LOGFILE ]; then
echo "`date`: New Entries in $LOGFILE: "
newlen=`wc -l $LOGFILE | awk ' { print $1 }'`
newlines=`expr $newlen - $len`
tail -$newlines $LOGFILE
len=$newlen
fi
sleep $GAP
done
exit 0