Bash脚本在终端中显示更新信息

问题描述:

我正在尝试编写一个显示python脚本输出的bash脚本。我想输出每秒钟刷新一次,所以我的脚本看起来像这样(run.sh):Bash脚本在终端中显示更新信息

#!/bin/bash 

export INTERVAL=1 
export SCRIPT="something.py" 

while [ true ] 
    do 
    clear 
    python ${SCRIPT} 
    sleep ${INTERVAL} 
    done 

屏幕,但是,闪烁而python脚本作品(有一些涉及网络接入)。我怎样才能使这个更复杂,等待脚本完成,然后清除我曾经拥有的?

在此先感谢!

使用手表。它只会在整个脚本完成时更新屏幕,并且会处理诸如清除屏幕和处理比单个屏幕大的输出。

watch -n ${INTERVAL} 'python ${SCRIPT}'

如果你想看到的手表长时间运行的任务是如何工作的例子,这样做:

watch 'date; echo; echo Long running task...; sleep 3; echo; date'

一个快速的方法是建立一个临时文件:

tmpf=`mktemp` 

while [ condition ] 
    do 
    python ${SCRIPT} > $tmpf 
    clear 
    cat $tmpf 
    sleep ${INTERVAL} 
    done 

rm $tmpf 

这就需要你做退出一些清理,但。除此之外,我会建议将整个循环移入python,因为真的,为什么不呢?您可以使用子进程分离出另一个shell,甚至可以获得更通用的程序。

补充: 可以凑合着陷阱内置(here的上一篇文章),当你杀了你的脚本来自动完成清理工作。

这是一个丑陋的黑客攻击,但不使用临时文件或FIFO的:

a=$(clear; python ${SCRIPT}) 
echo $a 

但严重的是:最好的办法是将屏幕清在你的脚本。给它一个开关-clear或类似的东西。