Wie finde ich die Anzahl der im Terminal verfügbaren vertikalen Linien?

12

Ich schreibe ein Skript, in dem das Git-Protokoll für ein Verzeichnis angezeigt wird, wenn ich eine CD einlege. Ein solches Protokoll kann überwältigend sein und Hunderte von Zeilen enthalten. Bisher beschränkte ich mich auf 20 fest codierte Zeilen ( ... | head -n 20), was für den Bildschirm bei der Arbeit in Ordnung ist, für den kleineren MacBook-Bildschirm zu Hause jedoch zu viel.

Ich würde es vorziehen, wenn das Protokoll auf beiden Terminals etwa die Hälfte des (vertikalen) Bildschirms einnimmt. Und "terminal" ändert sich auch: Es ist Gnome-Terminal bei der Arbeit, aber iTerm2 zu Hause. Und ich benutze keinen Bildschirm oder tmux.

Wie finde ich die Anzahl der in einem Terminal verfügbaren vertikalen Linien über die Befehlszeile?

Jalanb
quelle

Antworten:

20

Terminalparameter werden als $LINESund $COLUMNSVariablen gespeichert .

Zusätzlich können Sie ein spezielles Term-Operation-Programm verwenden, zum Beispiel tput:

tput lines  # outputs the number of lines of the present terminal window.
tput cols   # outputs the number of columns of the present terminal window.
Costas
quelle
9
LINESund COLUMNSwerden nur von einigen Muscheln gesetzt. bashlegt sie fest, aber nur für eine interaktive Shell (und exportiert sie nicht).
mr.spuratic
1
Die Umgebungsvariablen existieren in meinem tcsh nicht. Ich frage mich auch, ob das System sie zurücksetzen würde, wenn Sie die Größe des Terminalfensters ändern. Sowohl tput als auch stty funktionieren für mich, also habe ich etwas Neues gelernt :-)
jamesqf
In der @ jamesqf bash-Dokumentation heißt es: "Wird beim Empfang eines SIGWINCH automatisch festgelegt." Ja, es ändert sie, wenn Sie die Größe des Terminalfensters ändern.
Celada,
Für Autoset oben vaiable sind die folgenden Optionen verantwortlich, shopt -s checkwinsizedie in meiner /etc/bash.bashrcDatei mit Kommentar hinzugefügt wurden :# check the window size after each command and, if necessary, update the values of LINES and COLUMNS.
Costas
9

Dieser Befehl sollte Ihnen die Anzahl der Zeilen im Terminal anzeigen:

stty size | cut '-d ' -f1

Einige Systeme werden möglicherweise nicht implementiert, stty sizesodass Sie stattdessen möglicherweise Folgendes benötigen:

stty -a | tr \; \\012 | grep rows | tr -d ' rows'
Celada
quelle
1
Dies scheint sehr betriebssystemspezifisch zu sein. Können Sie die Liste der Systeme zusammenstellen, auf denen jede Beschwörung funktioniert?
Warren Young
4
Ich hatte Angst, dass das erste Betriebssystem spezifisch sein könnte, weshalb ich das zweite hinzugefügt habe. In der Tat sehe ich nach ein wenig Googeln, dass das erste wahrscheinlich nicht auf Solaris funktioniert. Der zweite sollte sehr portabel sein. Ganz ehrlich, @Costas ' tput linesscheint die bessere Antwort zu sein und ich habe es positiv bewertet. Ich wusste es vorher nicht.
Celada,
1
Ich möchte mit Ersatz langes Rohr bieten stty -adurch so etwas wie grep -Po 'rows \K[^;]*'odersed -n 's/.*rows \([^;]*\).*/\1/p'
Costas
@Costas Eigentlich war es frustrierend, dass weder mein Befehl noch einer von Ihnen unter MacOS funktionierte. Daher musste ich mir noch einen anderen Befehl ausdenken (bearbeitet). Go figure: MacOS gibt "24 Zeilen" anstelle von "24 Zeilen" aus! Ich denke immer noch, es tput linesist viel besser und ich denke, es ist ziemlich portabel!
Celada,