Per reinizializzare il terminale, un semplice reset
risolverà questo problema. Per ulteriori informazioni e opzioni, man reset
La risposta di @James Henstridge a questa domanda di AskUbuntu sembra identificare correttamente l'errore mentre il terminale si blocca in una modalità di "indirizzamento del cursore", qualunque cosa significhi.
La sua prima soluzione, il comando $ tput rmcup
, funziona, anche se non c'è molto in termini di spiegazione. Quindi, ho cercato di capirlo.
man tput
ci dice che
Il
tput
l'utility usa ilterminfo
database per rendere disponibili alla shell i valori delle capacità e delle informazioni dipendenti dal terminale (vedere sh(1)), per inizializzare o resettare il terminale, o restituire il nome lungo del tipo di terminale richiesto.
terminfo
inoltre non è molto utilmente documentato. La fonte più completa che posso trovare è un articolo tldp.org. Evidentemente terminfo
è un database di diversi terminali e quali comandi e capacità hanno. Presumibilmente ogni installazione Linux ne ha una? Quindi puoi usare terminali diversi?
man terminfo
indica che i suoi file sono in /etc/terminfo/*/*
, ma su Ubuntu 16.04 ho trovato solo un README lì. I file reali sono in /lib/terminfo/*/*
; per esempio. /lib/terminfo/l/linux
, qual è probabilmente il file più rilevante per la maggior parte dei lettori? Non posso dirlo, perché questi file non sono leggibili dall'uomo. L'articolo tldp.org collegato sopra afferma che infocmp
può essere utilizzato per vedere la loro fonte, ma non è vero:
$ infocmp /lib/terminfo/l/linux
infocmp: couldn't open terminfo file /lib/terminfo/l/linux.
L'articolo menziona anche i file di codice sorgente /etc/termcap
e /etc/terminfo.src
, ma questi non esistono in Ubuntu 16.04. Ho trovato un set di /usr/share/vte/termcap*/
directory che contengono xterm
leggibile dall'uomo File. Dovrei indovinare che tutto questo si connette al terminale GNOME che sto usando che è l'impostazione predefinita per Ubuntu, ma sono stanco di cercare di capire come.
Il man
pagina per terminfo
ha un altro jot utile, però. Sotto le sue "Capacità predefinite" c'è una "Stringa variabile" exit_ca_mode
con 'capname' ("capability name", presumo) rmcup
con la descrizione strings to end programs using cup
. La descrizione non è molto utile, ma il nome della variabile lo è; questo deve riferirsi alla capacità di un terminale di uscire dalla "modalità di indirizzamento del cursore", che è ciò in cui il terminale è bloccato.
Quindi, $ tput rmcup
deve utilizzare tput
per accedere al terminfo
database e attivare il exit_ca_mode
del terminale corrente capacità rmcup
, che interrompe la modalità di indirizzamento del cursore e riporta il terminale al normale comportamento di scorrimento.