Para reinicializar el terminal, un simple reset
arreglará esto. Para obtener más información y opciones, man reset
La respuesta de @James Henstridge a esta pregunta de AskUbuntu parece identificar el error correctamente, ya que el terminal se atasca en un modo de "direccionamiento del cursor", lo que sea que eso signifique.
Su primera solución, el comando $ tput rmcup
, funciona, aunque no hay mucho en el camino de la explicación. Entonces, traté de averiguarlo.
man tput
nos dice que
El tput
utilidad utiliza el terminfo
base de datos para hacer que los valores de las capacidades e información dependientes del terminal estén disponibles para el shell (consulte sh(1)), para inicializar o restablecer el terminal, o devolver el nombre largo del tipo de terminal solicitado.
terminfo
tampoco está muy útilmente documentado. La fuente más completa que puedo encontrar es un artículo de tldp.org. Evidentemente terminfo
es una base de datos de diferentes terminales y qué comandos y capacidades tienen. ¿Presumiblemente cada instalación de Linux tiene una? Entonces, ¿puedes usar diferentes terminales?
man terminfo
indica que sus archivos están en /etc/terminfo/*/*
, pero en Ubuntu 16.04 solo encontré un README allí. Los archivos reales están en /lib/terminfo/*/*
; p.ej. /lib/terminfo/l/linux
, ¿cuál es probablemente el archivo más relevante para la mayoría de los lectores? No puedo decirlo, porque estos archivos no son legibles por humanos. El artículo de tldp.org vinculado anteriormente establece que infocmp
se puede usar para ver su fuente, pero eso no es cierto:
$ infocmp /lib/terminfo/l/linux
infocmp: couldn't open terminfo file /lib/terminfo/l/linux.
El artículo también menciona archivos de código fuente /etc/termcap
y /etc/terminfo.src
, pero estos no existen en Ubuntu 16.04. Encontré un conjunto de /usr/share/vte/termcap*/
directorios que contienen xterm
legible por humanos archivos Tendría que adivinar que todo esto se conecta a la terminal de GNOME que estoy usando, que es la predeterminada para Ubuntu, pero estoy cansado de tratar de averiguar cómo.
El man
página para terminfo
Sin embargo, tiene una jota más útil. Debajo de sus 'Capacidades predefinidas' hay una 'Cadena variable' exit_ca_mode
con 'capname' ("nombre de la capacidad", supongo) rmcup
con la descripción strings to end programs using cup
. La descripción no es muy útil, pero el nombre de la variable sí; esto debe referirse a la capacidad de una terminal para salir del 'modo de direccionamiento del cursor', que es en lo que está atascada la terminal.
Entonces, $ tput rmcup
debe usar tput
para acceder al terminfo
base de datos y active el exit_ca_mode
del terminal actual capacidad rmcup
, que elimina el modo de direccionamiento del cursor y devuelve el terminal a su comportamiento de desplazamiento normal.