创建在同一屏幕中循环的脚本

创建在同一屏幕中循环的脚本

我的脚本有一个简单的问题,我需要在同一屏幕中显示行脚本,并且不显示上面的最后信息,请参阅我的演示代码:

#!/bin/bash

if [ -t 0 ]; then stty -echo -icanon -icrnl time 0 min 0; fi
#result=`sensors -A`
count=0
keypress=''
echo -ne "linha 1\nLinha 2\n " > /tmp/temp_script.log
while [ "x$keypress" = "x" ]; do    
  clear  
  let "count++" 
  output="$(cat /tmp/temp_script.log)"
  printf  "$output"\\b
  echo -en $count\\n
  sleep 1 
keypress="`cat -v`"
done
if [ -t 0 ]; then stty sane; fi
exit 0

结果代码:

当前代码

我需要以不生成第一个示例的多行的方式显示此信息,并仅显示相关信息的循环,如第二个示例所示:

我怎样才能做到这一点:

我的目标

依此类推,因此终端上不会有以前的循环印象,只有现在正在打印的内容。

答案1

假设clear真正清除屏幕,那么显示的脚本本身将不会生成第一个屏幕截图。如果你有一个额外的进程附加到/tmp/temp_script.log,那么它可以做一些事情......

另一方面,如果您的终端没有清除屏幕,那就是问题的一部分。也许那条彩色线是您运行脚本的提示符,您可能希望将其保留在屏幕顶部:

  • 通常您会设置TERM一个与终端描述相对应的合适值。
  • “合适的”终端描述告诉如何清除屏幕。
  • 作为副作用,清除屏幕(按照惯例)也会将光标移动到屏幕的左上角,但是
  • 从屏幕左上角清除屏幕也会清除彩色线(您可以可能想保留)
  • 如果你想从第二行清除,你可以(在大多数终端上)这样做
    printf '\033[2H\033[J''

或者

    输出杯 1 0
    tput 编辑
  • 但请记住,如果您的提示最初不在屏幕顶部,那么这只会留下任何内容曾是在屏幕顶部未触及。

问题的另一部分是这三行被重复打印,沿着屏幕向下延伸。您可以更改它以将光标移动到要打印计数器的位置,例如,

    printf '\033[4H'

或者

    输出杯 3 0

将它们放在一起,您的脚本可能如下所示(并使用,因为您和/或终端描述printf似乎有问题):TERM

    #!/bin/bash

    如果[-t 0];然后 stty -echo -icanon -icrnl 时间 0 分钟 0;菲
    #结果=`传感器-A`
    计数=0
    printf '\033[2H\033[J''
    按键=''
    回声“林哈1”
    回声“林哈2
    while [ "x$keypress" = "x" ];做    
      让“数++”
      printf '\033[4H'
      回显$计数
      睡觉 1
      按键=“`猫-v`”
    完毕
    如果[-t 0];然后精神正常;菲
    出口0

进一步阅读:

相关内容