完全覆盖Bash循环中终端上显示的最后一个输出

时间:2018-10-18 17:49:21

标签: bash

我有以下循环查看更改的目录大小:

while true; do du -hcs . ; sleep 2 ; clear ; done

我不满意的是du的清除和实际输出之间的等待时间。结果大约是一个闪烁的数字。

我该如何修改它以将新的数字简单地写在旧数字上,而中间没有黑屏?

2 个答案:

答案 0 :(得分:3)

watch du -hcs .

来自man page

  

监视重复运行 command ,显示其输出(第一个屏幕全屏)。这使您可以观察程序输出随时间的变化。默认情况下,该程序每2秒运行一次;使用-n--interval指定其他间隔。

watch很聪明:它只重绘屏幕上已更改的部分,避免全屏清除导致您用clear看到的闪烁。

答案 1 :(得分:0)

我认为watch是满足您需求的正确工具,但是

while true;do echo -n $(date +%Y%m%d%H%M%S) $(du -hcs ..|grep -v total);sleep 1;echo -e "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b";done

可能只是您要寻找的可怜替代品。

但是,如果您的外壳是破折号而不是bash,请使用:

while true;do echo $(date +%Y%m%d%H%M%S) $(du -hcs ..|grep -v total)|tr -d '\n';sleep 1;echo $'\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b';done