Wenn Sie nach einer Möglichkeit suchen, anhand eines Skripts zu überprüfen, können Sie eine der folgenden Aktionen ausführen:
- Laufen Sie
tput cols
und tput lines
, wie Manatwork vorschlägt
- Überprüfen Sie die Werte von $ LINES und $ COLUMNS
Aber wenn Sie die Details wollen, gehen wir:
Für virtuelle Terminals (xterm et al.) Gibt es einen ioctl()
Systemaufruf, der angibt, wie groß das Fenster ist. Wenn es kann, less
nutzt diesen Anruf. Wenn Sie die Größe des Fensters ändern, erhält alles, was in diesem Fenster ausgeführt wird, ein SIGWINCH
Signal, das Sie darüber less
informiert, dass nach einer neuen Fenstergröße gesucht werden soll. Zum Beispiel habe ich eine less
Ausführung gestartet (als Prozess-ID 16663), eine Verbindung damit hergestellt strace
und die Fenstergröße geändert . Das habe ich gesehen:
$ 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
Dies ist auch was tput cols
und tput lines
was hinter den Kulissen zu tun, wenn sie können. Weitere Informationen zu dieser Methode finden Sie unter man tty-ioctl
TIOCGWINSZ.
Für andere Terminals, z. B. solche, die an serielle Schnittstellen angeschlossen sind, gibt es jedoch keine Möglichkeit, diese Informationen direkt abzurufen. In diesem Fall wird less
nach Hinweisen in den Umgebungsvariablen gesucht.
LINES
und COLUMNS
wird häufig auf die Anschlussabmessungen eingestellt. Wenn die Terminalabmessungen gefunden werden bash
oder gefunden werden zsh
können, werden diese Variablen automatisch selbst festgelegt, damit nicht so clevere Programme die Terminalgröße leichter erkennen können. Die meisten anderen Shells, einschließlich dash
und tcsh
, setzen diese Variablen jedoch nicht.
TERM
wird normalerweise auf den Terminaltyp gesetzt. In diesem Fall kann die terminfo-Datenbank die erwartete Größe des Terminals enthalten. Wenn tput rows
die IOCTL nicht verwendet werden kann (z. B. wenn Sie über eine serielle Schnittstelle verbunden sind), wird auf die hier aufgezeichneten Werte zurückgegriffen. Für ein Terminal, dessen Größe sich ändern kann, ist dies nur eine Vermutung und wahrscheinlich falsch.
Weitere Informationen finden Sie unter man tput
Befehl zum Steuern des Terminals und man terminfo
eine Liste der Aufgaben, die Sie dem Terminal mitteilen können.