Bash - 替换&写入同一行

时间:2013-11-11 19:47:57

标签: bash echo

我有一个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:

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

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下的

值应该不断更新。 (我认为这应该 normaly 与-ne合作,但在我的情况下它不会。)

2 个答案:

答案 0 :(得分: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的基本版本。

答案 1 :(得分:0)

您可能希望尝试使用sed -i选项来“编辑”文件(即更改现有文件而不是编写新文件)