Se stai cercando un modo per controllare da uno script, puoi eseguire una di queste due operazioni:
- Corri
tput cols
e tput lines
, come suggerisce la manoscritta
- controlla i valori di $ LINES e $ COLUMNS
Ma se vuoi i dettagli, eccoci qui:
Per i terminali virtuali (xterm, et al) c'è una ioctl()
chiamata di sistema che ti dirà che dimensione ha la finestra. Se possibile, less
usa questa chiamata. Inoltre, quando si modifica la dimensione della finestra, tutto ciò che è in esecuzione in quella finestra riceve un SIGWINCH
segnale che indica less
che dovrebbe verificare la presenza di una nuova dimensione della finestra. Ad esempio, ho avviato una less
corsa (come processo ID 16663), collegato ad esso con strace
e ridimensionato la finestra. Questo è quello che ho visto:
$ strace -p 16663
Process 16663 attached - interrupt to quit
read(3, 0xbfb1f10f, 1) = ? ERESTARTSYS (To be restarted)
--- SIGWINCH (Window changed) @ 0 (0) ---
rt_sigaction(SIGWINCH, {0x805cf10, [WINCH], SA_RESTART}, {0x805cf10, [WINCH], SA_RESTART}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig -icanon -echo ...}) = 0
ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig -icanon -echo ...}) = 0
ioctl(1, TIOCGWINSZ, {ws_row=40, ws_col=80, ws_xpixel=0, ws_ypixel=0}) = 0
ioctl(2, TIOCGWINSZ, {ws_row=40, ws_col=80, ws_xpixel=0, ws_ypixel=0}) = 0
Questo è anche cosa tput cols
e tput lines
fare dietro le quinte, se possono. Per ulteriori informazioni su questo metodo, vedere man tty-ioctl
e cercare TIOCGWINSZ.
Per altri terminali come quelli collegati alle porte seriali, tuttavia, non è possibile ottenere direttamente queste informazioni. In tal caso, less
inizia a cercare indizi nelle variabili di ambiente.
LINES
e COLUMNS
sarà spesso impostato sulle dimensioni del terminale. In effetti, se bash
o è in zsh
grado di trovare le dimensioni del terminale, imposterà automaticamente queste variabili, per facilitare la visualizzazione delle dimensioni del terminale da parte di programmi non così intelligenti. Tuttavia, la maggior parte delle altre shell, incluso dash
e tcsh
, non imposta queste variabili.
TERM
di solito è impostato sul tipo di terminale, nel qual caso il database terminfo può contenere la dimensione prevista del terminale. Se tput rows
non è possibile utilizzare IOCTL (ad esempio, se si è connessi tramite una porta seriale), si riporterà ai valori registrati qui. Per un terminale le cui dimensioni possono cambiare, questa è solo un'ipotesi ed è probabile che sia sbagliata.
Per maggiori informazioni, vedi man tput
per il comando per controllare il terminale e man terminfo
per un elenco di cose che puoi dire al terminale di fare.