【问题标题】:BASH:How do i make output like in watch commandBASH:我如何在 watch 命令中进行输出
【发布时间】:2014-10-09 13:49:40
【问题描述】:

我的 linux 'watch' 命令很旧,不支持 '--color' 选项。我怎样才能有相同的输出呢?因为在我的脚本中,循环一个接一个地给出输出(当然)。但我需要它来代替以前的。终端输出有什么技巧吗?

#!/bin/bash

while true
do
/usr/sbin/asterisk -rx "show queue My_Compain" \
| grep Agent \
| grep -v \(Unavailable\) \
| sort -t"(" -k 2 \
| GREP_COLOR='01;31' egrep -i --color=always '^.*[0-9] \(Not in use.*$|$' \
| GREP_COLOR='01;36' egrep -i --color=always '^.*\(Busy*$|$'
sleep 2
done

【问题讨论】:

  • 你希望输出是什么样的?
  • 如果您希望屏幕显示在原地更新而不是附加到旧结果,您可以添加clear 作为循环的第一行。
  • @that other guy 谢谢,就是那个。我希望它可以在不眨眼的情况下更快地工作
  • clear 实际上只是将一堆空行发送到终端,迫使旧输出向上移动并移出视线,因此您无法摆脱轻微的眨眼。 printf 可以在格式化终端输出方面做很多事情,这几乎是事实上的,所以如果你想要更多尝试切换到输出。
  • @Matt Green,它对于单行来说可能很容易......有没有什么好的例子可以在 bash 中为多行做到这一点?

标签: bash watch


【解决方案1】:

您可以在转储输出之前使用clear 清除屏幕,以呈现就地更新的外观。

为了减少闪烁,您可以使用古老的双缓冲技术:

#!/bin/bash

while true
do
  buffer=$(
    clear
    /usr/sbin/asterisk -rx "show queue My_Compain" \
    | grep Agent \
    | grep -v \(Unavailable\) \
    | sort -t"(" -k 2 \
    | GREP_COLOR='01;31' egrep -i --color=always '^.*[0-9] \(Not in use.*$|$' \
    | GREP_COLOR='01;36' egrep -i --color=always '^.*\(Busy*$|$'
  )
  echo "$buffer"
  sleep 2
done

【讨论】:

  • 是的,当然。线条从 0 到 100 不等
  • 如果你添加| tail -n 20 这样你打印的行数不会超过你的终端在一屏中显示的行数会有帮助吗?
  • 啊抱歉,我没有擦除第二个“清除”,现在它可以完美运行了!谢谢你
猜你喜欢
  • 2013-08-06
  • 2015-09-18
  • 2018-01-16
  • 2014-09-26
  • 2013-12-26
  • 2011-12-28
  • 1970-01-01
  • 2012-09-17
  • 2019-12-06
相关资源
最近更新 更多