Я пишу скрипт, который показывает журнал git для каталога, когда я перехожу в него. Такой журнал может быть огромным, содержать сотни строк. До сих пор я ограничивал это жестко закодированными 20 строками ( ... | head -n 20
), что хорошо на экране при работе, но слишком много на меньшем экране MacBook дома.
Я бы предпочел, чтобы журнал занимал примерно половину (вертикального) экрана на любом терминале. И «терминал» тоже меняется: это терминал Gnome на работе, а iTerm2 дома. И я не использую screen или tmux.
Как узнать количество вертикальных линий, доступных в терминале из командной строки?
LINES
иCOLUMNS
установлены только некоторыми снарядами.bash
устанавливает их, но только для интерактивной оболочки (и не экспортирует их).shopt -s checkwinsize
которые добавлены в мой/etc/bash.bashrc
файл с комментариями:# check the window size after each command and, if necessary, update the values of LINES and COLUMNS.
Эта команда должна дать вам количество строк в терминале:
Некоторые системы могут не реализоваться,
stty size
поэтому вам может понадобиться что-то вроде этого:источник
tput lines
кажется лучшим ответом, и я проголосовал за него. Я не знал об этом раньше.stty -a
чем-то вродеgrep -Po 'rows \K[^;]*'
илиsed -n 's/.*rows \([^;]*\).*/\1/p'
tput lines
это намного лучше, и я думаю, что это довольно портативный!