GNU/Linux >> Linux Esercitazione >  >> Linux

Bash Clear Command Strano comportamento elimina il buffer di scorrimento.?

Ogni volta che eseguo in modo chiaro nel mio terminale, elimina il buffer di scorrimento dalla parte superiore dello schermo alla riga corrente. L'ho provato in xterm, st e urxvt e il problema rimane. C'è un modo per modificare il comportamento di clear in modo che non tocchi il buffer di scorrimento?

Risposta accettata:

Il commento "dalla parte superiore dello schermo alla riga corrente" è ambiguo. Se intendevi dall'alto della parte visibile dello schermo, che non è lo scorrimento . Lo scrollback di un terminale è la parte che puoi vedere solo utilizzando la barra di scorrimento (o tasti adatti come shift pageup).

XTerm Control Sequences documenta la sequenza di escape pertinente:

CSI Ps J  Erase in Display (ED).
            Ps = 0  -> Erase Below (default).
            Ps = 1  -> Erase Above.
            Ps = 2  -> Erase All.
            Ps = 3  -> Erase Saved Lines (xterm).

La capacità di descrizione del terminale clear usa il penultimo, ad es.

clear=E[HE[2J

per posizionare il cursore in alto a sinistra e quindi cancellare l'intero schermo (visibile). Potresti usa Cancella sotto , ma non viene utilizzato nella descrizione del terminale.

Facendo riferimento alla cancellazione dello scorrimento :Questa è una funzionalità specifica del terminale, originariamente una sequenza di escape in xterm (1999, documentata in ctlseqs.ms ma non menzionata nelle modifiche) e successivamente (2011) implementata come estensione per la console Linux e la descrizione del terminale corrispondente. Il database del terminale lo elenca come "interno vario".

Attualmente, queste descrizioni dei terminali hanno la caratteristica:

  • linux3.0 (l'attuale impostazione predefinita per "linux")
  • stucco
  • xterm+basic (un elemento costitutivo utilizzato nella maggior parte delle varianti di "xterm")

Se è supportato in sosia di xterm come VTE dovrebbe essere risolta mediante test (non esiste documentazione utile per VTE o Konsole).

Se preferisci non utilizzare l'estensione, puoi rimuovere E3 capacità dalla descrizione del terminale che utilizzi, ad es.

infocmp -1x >foo
edit foo, removing the line with "E3="
tic -x foo

Ho suggerito di utilizzare le opzioni -1 e -x per semplificare la formattazione e per mostrare la funzione da modificare. L'esempio fornito in https://ghostbin.com/paste/kfsbj è coerente con questo consiglio:

  • il percorso /home/flowerpick/.terminfo/x/xterm verrebbe usato da ncurses
  • le capacità AX e XT sono funzionalità estese (come E3 ), mostrato con il -x opzione.

Se stai usando più di un tipo di terminale, dovresti farlo per ciascuno (valore di $TERM ), e la modifica si applica solo alla macchina su cui esegui clear . Le prime due righe di infocmp output mostra su quale stai lavorando:

#   Reconstructed via infocmp from file: /home/flowerpick/.terminfo/x/xterm
xterm|xterm terminal emulator (X Window System),

Ad esempio, uxrvt imposta $TERM a qualcosa come rxvt-unicode , producendo righe come questa in infocmp :

#       Reconstructed via infocmp from file: /lib/terminfo/r/rxvt-unicode       
rxvt-unicode|rxvt-unicode terminal (X Window System),

Il st il programma usa xterm (o possibilmente xterm-256color ), anche se è passato del tempo da quando ho visto una copia di quello che ha funzionato abbastanza bene per commentare.

Correlati:forzare lo schermo vuoto e ignorare l'input?

A proposito, potresti avere un alias per clear che sta inviando la sequenza di escape data (ignorando la descrizione del terminale), ma non l'ho visto segnalato da nessuno.

Se si desidera "cancellare sopra", non è così semplice come digitare "cancella". L'escape

Linux
  1. Come cancellare la cronologia di Bash su Linux

  2. Come cancellare un comando specifico dalla cronologia di Bash in Linux

  3. Come cancellare il Terminale in Ubuntu

  4. comando di esportazione bash

  5. Aumenta la dimensione del buffer di scrollback del terminale Linux

Bash ha letto Comando

Bash Heredoc

Comando sorgente Bash

Comando della cronologia in Linux (Cronologia di Bash)

Comando Bash printf

Script Bash(II)