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:
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:
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 elclear
realmente 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
TERM
un 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 TERM
descripció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: