Als einfaches Beispiel möchte ich ein CLI-Skript schreiben, das =
über die gesamte Breite des Terminalfensters gedruckt werden kann .
#!/usr/bin/env php
<?php
echo str_repeat('=', ???);
oder
#!/usr/bin/env python
print '=' * ???
oder
#!/usr/bin/env bash
x=0
while [ $x -lt ??? ]; do echo -n '='; let x=$x+1 done; echo
Antworten:
tput cols
gibt Ihnen die Anzahl der Spalten an.tput lines
gibt Ihnen die Anzahl der Zeilen an.quelle
echo -e "lines\ncols"|tput -S
Um sowohl die Zeilen als auch die Spaltentput
ist ein großartiger Befehl mit vielen Befehlen zum Lesen des Status des Terminals, zum Steuern der Cursor- und Texteigenschaften usw.alias dim="echo $(tput cols)x$(tput lines)"
, der dazu führen kann80x50
.alias dim='echo Terminal Dimensions: $(tput cols) columns x $(tput lines) rows'
In Bash sollten die
$LINES
und$COLUMNS
Umgebungsvariablen in der Lage sein, den Trick auszuführen. Das wird bei jeder Änderung der Terminalgröße automatisch eingestellt. (dh das SIGWINCH- Signal)quelle
checkwinsize
Option festlegen . Dieses nicht interaktive Skript druckt beispielsweise die Abmessungen des Terminals, auf dem es ausgeführt wird:shopt -s checkwinsize; (:); echo $LINES $COLUMNS
(Diecheckwinsize
Option initialisiert die Variablen erst, nachdem auf das Ende einer Subshell gewartet wurde, weshalb wir die(:)
Anweisung benötigen. )$LINES
und$COLUMNS
werden nach demSIGWINCH
Senden aktualisiert , tatsächlich nach jeder interaktiven Befehlsausführung. Wenn Sie zu aktualisieren versuchen ,PS1
mittrap SIGWINCH
Ihnen nicht verwenden können$LINES
und$COLUMNS
halten sie alte Werte ((LINES
undCOLUMNS
werden nur von bash als Shell-Variablen gesetzt. Bash legt sie nicht als Umgebungsvariablen fest , es sei denn, Sie exportieren diese Shell-Variablen.Und es gibt
stty
von CoreutilsEs wird die Anzahl der Zeilen und Spalten bzw. die Höhe und Breite gedruckt.
Dann können Sie entweder
cut
oder verwendenawk
, um das gewünschte Teil zu extrahieren.Das ist
stty size | cut -d" " -f1
für die Höhe / Linien undstty size | cut -d" " -f2
für die Breite / Spaltenquelle
quelle
tr
Kommando all die Jahre verpasst ? (Gesichtspalme)yes '='
gibt unendlich viele '=' Zeilen aus und die folgenden Befehle sind so organisiert, dass sie das Terminal füllenUm dies in einer Windows CLI-Umgebung zu tun, kann ich am besten den Befehl mode verwenden und die Ausgabe analysieren.
Ich hoffe es ist nützlich!
HINWEIS : Die zurückgegebene Höhe ist die Anzahl der Zeilen im Puffer. Es ist nicht die Anzahl der Zeilen, die im Fenster sichtbar sind. Gibt es bessere Möglichkeiten da draußen?
quelle
Unter POSIX möchten Sie letztendlich den Aufruf
TIOCGWINSZ
(Get WINdow SiZe)ioctl()
aufrufen. Die meisten Sprachen sollten dafür eine Art Wrapper haben. In Perl können Sie beispielsweise Term :: Size verwenden :quelle
:io.columns
Erlang:io:columns().
erlang.org/doc/man/io.html#columns-0TIOCGWINSZ
POSIX-Standard enthält keine undioctl()
ist nur für die veraltete STREAMS-Funktion definiert.Wie ich in der Antwort von lyceus erwähnt habe, schlägt sein Code unter nicht-englischen Windows-Gebietsschemas fehl, da die Ausgabe von
mode
möglicherweise nicht die Teilzeichenfolgen "Spalten" oder "Zeilen" enthält:Sie können den richtigen Teilstring finden, ohne nach Text zu suchen:
Beachten Sie, dass ich mich nicht einmal mit Zeilen beschäftige, weil sie unzuverlässig sind (und sie mir eigentlich egal sind).
Bearbeiten: Laut Kommentaren zu Windows 8 (oh du ...) denke ich, dass dies zuverlässiger sein kann:
Testen Sie es trotzdem, weil ich es nicht getestet habe.
quelle
---
Zeile. i.imgur.com/4x02dqT.png$mode = `mode`; list($rows, $cols) = array_slice(preg_split('/\n/', substr($mode, strpos($mode, 'CON:'))), 2, 2);
. Und dann ersetze ich einfach alles außer Zahlen.CON device status:
? VielleichtCON.*:
würde es besser funktionieren, so etwas zusammenzubringen .Inspiriert von der Antwort von @ pixelbeat, ist hier ein horizontaler Balken, der durch
tput
leichten Missbrauch vonprintf
Polsterung / Füllung und entstanden isttr
quelle
In einigen Fällen stimmen Ihre Zeilen / Zeilen und Spalten nicht mit der tatsächlichen Größe des verwendeten "Terminals" überein. Möglicherweise steht Ihnen kein "tput" oder "stty" zur Verfügung.
Hier ist eine Bash-Funktion, mit der Sie die Größe visuell überprüfen können. Dies funktioniert bis zu 140 Spalten x 80 Zeilen. Sie können die Maxima nach Bedarf anpassen.
quelle