Creando script con bucle en la misma pantalla

Creando script con bucle en la misma pantalla

Tengo un problema simple, con mi secuencia de comandos, necesito una secuencia de comandos de fila en la misma pantalla y no muestra la última información anterior; consulte mi código de demostración:

#!/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

El código de resultado:

código actual

Necesito mostrar esta información de una manera que no genere estas líneas múltiples del primer ejemplo y mostrar solo el bucle de la información en cuestión, como en el segundo ejemplo:

Cómo puedo hacer esto:

mi objetivo

Y así sucesivamente, de modo que no habrá impresiones anteriores del bucle en el terminal, solo lo que se está imprimiendo ahora.

Respuesta1

Suponiendo que elclearrealmente borra la pantalla, entonces el script mostrado, por sí solo, no producirá la primera captura de pantalla. Si tuviera un proceso adicional adjunto /tmp/temp_script.log, entonces eso podría hacer algo...

Por otro lado, si tu terminal no borra la pantalla, eso es parte del problema. Quizás esa línea de color sea el mensaje desde el que ejecutó el script y le gustaría mantenerla en la parte superior de la pantalla:

  • normalmente establecería TERMun valor adecuado que corresponda a una descripción de terminal.
  • una descripción de terminal "adecuada" indica cómo borrar la pantalla.
  • Como efecto secundario, al borrar la pantalla (por convención) también se mueve el cursor a la esquina superior izquierda de la pantalla, pero
  • Limpiar la pantalla desde la esquina superior izquierda de la pantalla también borrará la línea de color (quepodríaquerer guardar)
  • Si desea borrar desde la segunda línea, puede (en la mayoría de los terminales) hacer
    printf '\033[2H\033[J'

o

    taza tput 1 0
    poner ed
  • pero tenga en cuenta que si su mensaje originalmente no estaba en la parte superior de la pantalla, esto simplemente dejaría lo que seaeraen la parte superior de la pantalla intacta.

La otra parte del problema es que las tres líneas se imprimen repetidamente y descienden por la pantalla. Puede cambiar eso para mover el cursor donde desea imprimir el contador, por ejemplo,

    printf '\033[4H'

o

    taza tput 3 0

Juntándolos, su secuencia de comandos podría verse así (y usar printf, ya que algo parece estar mal con su TERMdescripción y/o la de su terminal):

    #!/bin/bash

    si [-t 0]; luego stty -echo -icanon -icrnl tiempo 0 min 0; fi
    #resultado=`sensores -A`
    contar=0
    printf '\033[2H\033[J'
    pulsación de tecla = ''
    eco "línea 1"
    eco "Línha 2
    mientras [ "x$keypress" = "x" ]; hacer    
      deja "contar++"
      printf '\033[4H'
      eco $ cuenta
      dormir 1
      pulsación de tecla="`cat -v`"
    hecho
    si [-t 0]; entonces me quedo cuerdo; fi
    salir 0

Otras lecturas:

información relacionada