Se você está procurando uma maneira de verificar um script, você pode fazer uma destas:
- Execute
tput cols
etput lines
, como sugere manatwork - verifique os valores de $ LINES e $ COLUMNS
Mas se você quiser os detalhes, aqui vamos nós:
Para terminais virtuais (xterm, et al) existe uma chamada de sistema ioctl()
que lhe dirá qual o tamanho da janela. Se puder, less
usa essa chamada. Além disso, quando você altera o tamanho da janela, o que está sendo executado nessa janela recebe um sinal SIGWINCH
que permite que less
saiba que deve procurar um novo tamanho de janela. Por exemplo, iniciei um less
em execução (como ID de processo 16663), conectado a ele com strace
e redimensionei a janela. Isso é o que eu vi:
$ 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
Isso também é o que tput cols
e tput lines
fazem nos bastidores, se puderem. Para mais informações sobre este método, consulte man tty-ioctl
e procure por TIOCGWINSZ.
Para outros terminais, como aqueles conectados a portas seriais, não há como obter essa informação diretamente. Nesse caso, less
começa a procurar por pistas nas variáveis de ambiente.
-
LINES
eCOLUMNS
geralmente serão definidos para as dimensões do terminal. De fato, sebash
ouzsh
puder encontrar as dimensões do terminal, ele definirá essas variáveis automaticamente, para facilitar a visualização do tamanho do terminal por programas não tão inteligentes. No entanto, a maioria dos outros shells, incluindodash
etcsh
, não definem essas variáveis. -
TERM
é geralmente configurado para o tipo de terminal, em cujo caso o banco de dados terminfo pode conter o tamanho esperado do terminal. Setput rows
não puder usar o IOCTL (por exemplo, se você estiver conectado por uma porta serial), ele voltará aos valores registrados aqui. Para um terminal cujo tamanho pode mudar, isso é apenas um palpite e é provável que esteja errado.
Para mais informações, consulte man tput
para o comando para controlar o terminal, e man terminfo
para uma lista de coisas que você pode dizer ao terminal para fazer.