是否可以让bash脚本在同一行上输出多行而不用' clear'?

时间:2013-09-05 15:11:34

标签: bash unix

Bash脚本输出一些统计数据。

while : 
do
      date
      sensors | grep "temp1"
      sensors | grep "Core"
      acpi
      sleep 1
done

可以使用一个班轮,例如date,并使用echo -ne "$(date)\r"在同一行上输出。是否可以在不使用clear的情况下对多行执行相同操作?

3 个答案:

答案 0 :(得分:4)

一种选择是在GNU watch

下运行它
watch -n 1 'date; sensors | grep "temp1" ;sensors | grep "Core";acpi'            

答案 1 :(得分:3)

你可以这样做:

while true; do    
    date
    sensors | grep "temp1"
    sensors | grep "Core"
    acpi

    sleep 1

    for i in {1..4}; do # clear four lines above
        tput cuu1 # up by one line
        tput el # clear that line
    done
done

使用man tput获取更多信息。要查看功能列表,请使用man terminfo

编辑:

这是我想出的一个黑客,以避免眨眼:

while true; do
    echo -n "$(date)"; tput el; echo
    echo -n "$(sensors | grep "temp1")"; tput el; echo
    echo -n "$(sensors | grep "Core")"; tput el; echo
    echo -n "$(acpi)"; tput el; echo

    sleep 1
    tput cuu 4
    # tput -S <<< $'cuu1 \n cuu1 \n cuu1 \n cuu1' # that's how you pass several actions to tput, but instaed of cuu1 several times use 'cuu N'
done

当然,只有当你的命令只输出一行时,这才有效。

答案 2 :(得分:3)

你可以:

echo -n $'\e[H\e[2J'

或者

tput clear