В качестве простого примера я хочу написать скрипт CLI, который может печатать =
по всей ширине окна терминала.
#!/usr/bin/env php
<?php
echo str_repeat('=', ???);
или
#!/usr/bin/env python
print '=' * ???
или
#!/usr/bin/env bash
x=0
while [ $x -lt ??? ]; do echo -n '='; let x=$x+1 done; echo
Ответы:
tput cols
говорит вам количество столбцов.tput lines
говорит вам количество строк.источник
echo -e "lines\ncols"|tput -S
чтобы узнать как строки, так и столбцы, смотрите: linux.about.com/library/cmd/blcmdl1_tput.htmtput
отличная команда с большим количеством команд для чтения состояния терминала, управления курсором и свойствами текста и так далее.alias dim="echo $(tput cols)x$(tput lines)"
который может привести к80x50
.alias dim='echo Terminal Dimensions: $(tput cols) columns x $(tput lines) rows'
В bash переменные
$LINES
и$COLUMNS
переменные среды должны быть в состоянии добиться цели. Будет установлено автоматически при любом изменении размера терминала. (т.е. сигнал SIGWINCH )источник
checkwinsize
опцию. Например, этот неинтерактивный скрипт напечатает размеры терминала, на котором он запущен:shopt -s checkwinsize; (:); echo $LINES $COLUMNS
(checkwinsize
опция инициализирует переменные только после ожидания завершения подоболочки, поэтому нам нужен(:)
оператор)$LINES
и$COLUMNS
обновляются послеSIGWINCH
отправки, фактически после выполнения любой интерактивной команды. Если вы пытаетесь обновитьPS1
с помощью,trap SIGWINCH
вы не можете использовать,$LINES
и$COLUMNS
они сохраняют старые значения ((LINES
иCOLUMNS
устанавливаются только как переменные оболочки bash. Bash не будет устанавливать их как переменные среды , если вы не экспортируете эти переменные оболочки.И есть
stty
, из coreutilsОн напечатает количество строк и столбцов или высоту и ширину соответственно.
Затем вы можете использовать либо
cut
илиawk
извлечь часть , которую вы хотите.Это
stty size | cut -d" " -f1
для высоты / линий иstty size | cut -d" " -f2
для ширины / столбцовисточник
источник
tr
команду все эти годы? (yes '='
выведет бесконечное количество строк '=', и следующие команды организуют достаточно для заполнения терминалаЧтобы сделать это в среде Windows CLI, лучший способ, который я могу найти, - это использовать команду mode и проанализировать вывод.
Я надеюсь, что это полезно!
ПРИМЕЧАНИЕ . Возвращаемая высота - это количество строк в буфере, а не количество строк, видимых в окне. Есть ли лучшие варианты там?
источник
В POSIX, в конечном счете, вы хотите вызвать
TIOCGWINSZ
(Get WINdow SiZe)ioctl()
вызов. У большинства языков должна быть какая-то обертка для этого. Например, в Perl вы можете использовать термин :: размер :источник
:io.columns
Эрланг:io:columns().
erlang.org/doc/man/io.html#columns-0TIOCGWINSZ
стандарте POSIX его нет, иioctl()
он определен только для устаревшей функции STREAMS.Как я уже упоминал в ответе лицея, его код не будет работать в неанглийской локали Windows, потому что тогда выходные данные
mode
могут не содержать подстрок «столбцы» или «строки»:Вы можете найти правильную подстроку без поиска текста:
Обратите внимание, что я даже не беспокоюсь о строках, потому что они ненадежны (и я на самом деле их не волную).
Изменить: Согласно комментариям о Windows 8 (о, вы ...), я думаю, что это может быть более надежным:
Проверьте это, хотя, потому что я не проверял это.
источник
---
строки. i.imgur.com/4x02dqT.png$mode = `mode`; list($rows, $cols) = array_slice(preg_split('/\n/', substr($mode, strpos($mode, 'CON:'))), 2, 2);
. И тогда я просто заменяю все, кроме цифр.CON device status:
? Может быть, что-то похожееCON.*:
будет работать лучше.Вдохновленный ответом @ pixelbeat, вот горизонтальная полоса, появившаяся благодаря
tput
небольшому неправильному использованиюprintf
отступов / заливки иtr
источник
В некоторых случаях ваши строки / строки и столбцы не соответствуют фактическому размеру используемого «терминала». Возможно, у вас нет доступных «tput» или «stty».
Вот функция bash, которую вы можете использовать для визуальной проверки размера. Это будет работать до 140 столбцов х 80 строк. Вы можете настроить максимумы по мере необходимости.
источник