gpt4 book ai didi

linux - 循环回显显示多个变量的 'live update'

转载 作者:太空狗 更新时间:2023-10-29 11:17:34 24 4
gpt4 key购买 nike

我需要一个函数来跨多行在终端中显示多个实时数据流的输出。理想的结果将像这样打印到终端:

Measurement 1: #### 
Measurement 2: ####

其中 #### 以 1 秒的间隔更新,但其余文本保持在屏幕上。

这个问题已经解决了单行输出here ,但我不知道如何扩展到多行。

这是我目前所拥有的:

function doit {
while :;
do
i=$(current reading from sensor 1)
j=$(current reading from sensor 2)
echo -ne "Measurement 1: $i\nMeasurement 2: $j"'\r';
sleep 1;
done
}

这会导致连续输出仅覆盖终端上的第二行,在每次循环迭代后在终端上创建一个新的输出 block 。

另一种解决方案 here是:

function doit {
while :;
do
i=$(current reading from sensor 1)
j=$(current reading from sensor 2)
echo -ne "Measurement 1: $i\nMeasurement 2: $j"'\r';
sleep 1;
tput cuu1
tput el
tput cuu1
tput el
done
}

这很接近,但会在每次循环后清除终端上显示的所有文本,这会造成令人不快的视觉效果,因为文本 block 在屏幕上闪烁。这将必须起作用,以便有人可以密切监视读数。我需要将其扩展到 5 行或更多行的输出。感谢您提出任何建议,并期待看到一些解决方案!

最佳答案

这是一个试图通过在每行末尾发送删除序列来避免闪烁屏幕的版本(这通常不会删除任何内容,但如果前一行更长的话会有所帮助)。我使用 $RANDOM 来表示“获取测量值”操作,因为这是一个数字,所以我使用 %5d 格式,以便数字在每个周期(这也有助于避免显示伪影)。

function doit {
local up2=$(tput cuu 2)$(tput cr) up=
local endl=$(tput el)$'\n'
while :; do
local i=$RANDOM
local j=$RANDOM
printf "%sMeasurement 1: %5d%sMeasurement 2: %5d%s" "$up" "$i" "$endl" "$j" "$endl"
up=$up2
sleep 1;
done
}

关于linux - 循环回显显示多个变量的 'live update',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41818705/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com