1

我有一个 bash 脚本,可以从许多服务器获取详细信息。它工作得很好,但我希望这些行得到更新而不是写新的。

while [ true ] ; do
for i in $(seq ${#details[@]}); do
    .... more code (irrelevant)

echo   ${server[$i]}
echo   $stat1
echo   $stat2
echo   $stat3
echo   $stat4


done
done

我该怎么做,所有行都会不断更新到同一行?我尝试使用 echo -ne 但这使得所有内容都排在一条长线上。

我希望该行保留该位置并使用新值进行更新。

如果有人知道诀窍,那就太好了。

谢谢!

更新 1

@cbuckley:

感谢您的回答,但它无法正常工作。以这种方式使用 -ne 我已经尝试过了。结果是(它总是创建新行):

10.0.0.2
100310.0.0.1
72710.0.0.3
368310.0.0.2
100310.0.0.1
72710.0.0.3

应该

10.0.0.1
17
1003
10.0.0.2
319
727
10.0.0.3
157
3683

IP 下的值应不断更新。(我认为这应该通常与-ne一起使用,但在我的情况下它不会)。

4

2 回答 2

1

如果您已经跨多行输出,则无法在不清除屏幕的情况下删除这些行。你有两个选择:

使用watch

您可以编写一个输出统计信息一次的脚本,然后watch重复使用该脚本:

watch -n 10 ./script.sh # calls script every 10 seconds.

清屏

如果这不合适,您需要自己清除屏幕:

while [ true ] ; do
    clear # clear the screen

    for i in $(seq ${#details[@]}); do
        # ...
    done

    sleep 10 # don't update the screen too often
done

但是,此时,您几乎已经实现了一个基本版本watch

于 2013-11-11T19:51:37.107 回答
0

您可能想尝试使用“就地”编辑文件sed的选项(即更改现有文件而不是写入新文件)-i

于 2013-11-11T19:51:14.580 回答