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
或类似的东西。