E non dire " $TERM" - è sempre xterm.
Come può uno bashscript dire in quale terminale è in esecuzione, in particolare se è iTerm, Terminal.app o effettivamente un xterm?
Chiedo perché resetnon 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 resetcon 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 resetlo 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-bunche avere il lavoro di inserimento). Terminal.app e iTerm stanno lanciando una chiave in questo piano non implementando resetcorrettamente.
Questo significa che semplicemente ignorare resetnon è proprio così: se sono su una macchina Linux, deve sapere se sto usando gnome-terminalo 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.
resetcomando 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.apple 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.