¿Hay alguna manera de hacer desaparecer el contenido que se muestra justo después de que el usuario ingrese?
Por ejemplo, tome este archivo a continuación
#!/bin/bash
read -n 1 -p 'how are you ? ' var
if [ "$var" == "y" ]
then
echo 'Have fun'
else
echo 'Go to Doctor'
fi
Si ejecuta esto, la salida es
how are you ? yHave fun
Estoy buscando algo que me permita hacer how are you ?
desaparecer tan pronto como el usuario presione una tecla
Y luego, después de desaparecer, imprimir Have fun
Entonces, quiero que la última salida del programa anterior sea solo
Have fun
Nota: Además, no se debe borrar nada sobre este script que esté impreso en la pantalla de la shell.
estoy usando bash
clear
entreecho
s no es una opción?clear
borrará la salida que ya está impresa arriba en la pantalla si hay alguna. @sebasthAre you fine
viene ¿No debería ser esoHow are you
?Respuestas:
Puedes usar:
(o
printf '\r'
) para mover el cursor al comienzo de la línea. Seguido por:para eliminar todo hasta el final de la línea. (
tcsh
yzsh
también tiene elechotc
incorporado que puede usar con eltermcap
equivalente de esoterminfo
el
:echotc ce
(tambiénechoti el
enzsh
))fuente
Use un retorno de carro (
\r
). Este carácter especial (un remanente de los días de las máquinas de escribir mecánicas) moverá el cursor de regreso al comienzo de la línea. Luego, necesita tantos espacios como el mensaje que desea eliminar (esto sobrescribirá el mensaje) y luego un segundo retorno de carro para volver al principio antes de imprimir el siguiente mensaje. Algo como esto:Ejecutar el script anterior imprime:
fuente
\r
, podría poner todos los espacios entre\rHave fun
y\n
.Hay varias maneras de hacer esto, desde pruebas idiotas hasta elegantes.
El método más infalible (aunque la mayoría del trabajo) es el espacio de retroceso del espacio de retroceso repetido sin embargo, tantas veces como sea necesario. Esto funciona en todo menos en los teletipos (eliminar la tinta del papel es un desafío).
A continuación, la escala es espacios de retorno de carro retorno de carro. Esto no funciona con emuladores de terminal que insertan un salto de línea antes o después de cada retorno de carro (esta es una opción minicom y otras pueden configurarse para tener).
Luego están los trucos específicos del terminal. Solo mencionaré los códigos de capacidad de termcap, ya que las bases de datos de termcap y terminfo pueden mostrar el uso. (Aquí hay una lista).
Simple para una sola línea es mover a la columna (ch) seguido de borrar al final de la línea (ce).
Para casos más complicados, incluidas las respuestas de varias líneas, hay guardar la posición absoluta (sc), solicitar, leer la respuesta, restaurar la posición del cursor (rc), borrar hasta el final de la pantalla (cd).
En la mayoría de los casos, puede codificar los valores de vt100 para las dos últimas respuestas, ya que la mayoría de los emuladores de terminal son compatibles con él. Por supuesto, no todas las terminales admiten esas opciones, pero las que no son raras y obsoletas.
fuente