E non dire " $TERM
" - è sempre xterm
.
Come può uno bash
script dire in quale terminale è in esecuzione, in particolare se è iTerm, Terminal.app o effettivamente un xterm?
Chiedo perché reset
non funziona¹ out of the box su Terminal.app e iTerm2. iTerm2, tuttavia, riconosce una sequenza di escape per eseguire un reset del terminale ( \x1b]50;ClearScrollback\x07
), e se potessi rilevarlo, potrei scavalcare reset
con un alias che fa la cosa giusta. AFAICT, Terminal.app non ha una sequenza di reset, e la gente ricorre a un ridicolo hacker tom per aggirarlo .
Il mio obiettivo finale qui è di avere reset
lo stesso lavoro se sto lavorando su OS X o Linux, lavorando localmente o da remoto tramite SSH. (Non voglio provare a ricordare quale, ed è utile fare reset && command-that-outputs-a-bunch
e avere il lavoro di inserimento). Terminal.app e iTerm stanno lanciando una chiave in questo piano non implementando reset
correttamente.
Questo significa che semplicemente ignorare reset
non è proprio così: se sono su una macchina Linux, deve sapere se sto usando gnome-terminal
o iTerm per inviare la giusta sequenza di escape.
Esiste un modo (anche se ne ho bisogno ioctl
) di chiedere al terminale che cos'è veramente ?
¹ Ai fini di questa domanda, il ripristino dovrebbe cancellare lo schermo, ripristinare il cursore e cancellare il buffer di scorrimento.
reset
, poiché questo è ciò che le mie dita sanno.
reset
comando cancelli il contenuto di scorrimento dell'emulatore di terminale, ma non è garantito farlo, perché scroll-back è una funzione specifica dell'emulatore di terminale, non proprio un parte di un terminale. Tuttavia, Terminal supporta un'estensione della sequenza di escape ED (Erase in Display) per cancellare lo scroll-back ESC [ 3 J
. È possibile cancellare lo schermo, quindi utilizzare, ad esempio, reset && printf '\e[3J’
xterm
(attraverso TERM=xterm
) mi aspetto che tu emuli un superset di XTerm, che cancella il suo scrollback al reset. (Proprio come se avessi inviato la sequenza di escape per "blu", ti aspetteresti il blu.) Concesso, il mio xterm mi dice che Erase is backspace.
, di cui sono grato, nient'altro; è solo fastidioso.
Terminal.app
le impostazioni, la scheda Terminale e si impostano le linee di scorrimento su 0? Ciò disabilita tutto il testo sopra la riga corrente o semplicemente qualcosa sopra la parte superiore dello schermo? Lo so, non è esattamente quello che hai chiesto, vale la pena provare.