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

时间:2011-03-28 20:50:30

标签: bash

我正在尝试编写一个显示python脚本输出的bash脚本。我希望输出每秒都刷新一次,所以我的脚本看起来像这样(run.sh):

#!/bin/bash

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

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

然而,当python脚本工作时,屏幕会闪烁(涉及一些Web访问)。我怎样才能使这个更复杂,等待脚本完成清除以前的内容?

提前致谢!

3 个答案:

答案 0 :(得分:5)

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

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

如果您想查看手表如何处理长时间运行任务的示例,请执行以下操作:

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

答案 1 :(得分:0)

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

tmpf=`mktemp`

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

rm $tmpf

但是,这需要您在退出时进行一些清理。除此之外,我建议将整个循环移动到python中,因为真的,为什么不呢?您可以使用子进程来分叉另一个shell,甚至可以获得更通用的程序。

<强>补充: 您可以使用内置的陷阱here上的文章)来完成清除脚本时自动清理。

答案 2 :(得分:0)

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

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

但严重:最好的方法是在您的脚本中加入屏幕清除。给它一个开关-clear或类似的东西。