Qual é a largura do terminal por COLUMNS?

1

em man bash , vi a variável de ambiente COLUMNS é a largura do terminal. Eu joguei com seus valores diferentes, mas não parece ser a largura real do terminal em termos de número de caracteres:

$ dpkg -l | grep mozilla
ii  rhythmbox-mozilla                      2.96-0ubuntu4.3                         Rhythmbox Mozilla plugin
ii  totem-mozilla                          3.0.1-0ubuntu21.1                       Totem Mozilla plugin
$ echo $COLUMNS
135
$ COLUMNS=13 dpkg -l | grep mozilla
ii  totem-mozilla  3.0.1-0ubuntu2 Totem Mozilla plugin
$ COLUMNS=1 dpkg -l | grep mozilla
ii  totem-mozilla  3.0.1-0ubuntu2 Totem Mozilla plugin
$ COLUMNS=100 dpkg -l | grep mozilla
ii  rhythmbox-mozilla   2.96-0ubuntu4.3     Rhythmbox Mozilla plugin
ii  totem-mozilla       3.0.1-0ubuntu21.1   Totem Mozilla plugin
$ COLUMNS=200 dpkg -l | grep mozilla
ii  rhythmbox-mozilla                            2.96-0ubuntu4.3                              Rhythmbox Mozilla plugin
ii  totem-mozilla                                3.0.1-0ubuntu21.1                            Totem Mozilla plugin

Qual é a largura do terminal por COLUMNS? Obrigado.

    
por Tim 11.07.2014 / 00:39

2 respostas

3

COLUMNS é uma variável definida pelo bash e não deve ser uma variável definida manualmente. Também não é exportado por padrão, então os aplicativos lançados pelo shell nem mesmo o veem.

Para que serve então? Ele contém a largura do seu emulador de terminal em caracteres. Seu equivalente vertical é LINES . Ambos são usados pelo shell select embutido. O select integrado é usado para apresentar ao usuário uma lista de itens que eles podem selecionar. Em seguida, ele tenta exibir a lista de forma que ela caiba dentro do terminal. Exemplos abaixo:

Com uma janela de terminal 35x50:

$ select foo in a b c d e f g h i j k l m n o p q r s t u v w x y z; do echo foo="$foo"; done
1) a    7) g  13) m  19) s  25) y
2) b    8) h  14) n  20) t  26) z
3) c    9) i  15) o  21) u
4) d   10) j  16) p  22) v
5) e   11) k  17) q  23) w
6) f   12) l  18) r  24) x
#? 

Com uma janela de terminal 100x10:

$ select foo in a b c d e f g h i j k l m n o p q r s t u v w x y z; do echo foo="$foo"; done
1) a    3) c   5) e   7) g   9) i  11) k  13) m  15) o  17) q  19) s  21) u  23) w  25) y
2) b    4) d   6) f   8) h  10) j  12) l  14) n  16) p  18) r  20) t  22) v  24) x  26) z
#? 
    
por 11.07.2014 / 00:57
1

$COLUMNS fornece a largura do terminal. Quanto ao uso com dpkg -l , você deve olhar para a linha mais longa (isto é, não use grep , pois provavelmente descartará essa linha). E, claro, se $COLUMNS for muito pequeno, como 1 ou 13, não se pode fazer nada por você.

EDIT: se a saída dpkg -l não estiver conectada a um terminal, por exemplo ao piping para o grep, o dpkg usa tamanhos de coluna baseados nos campos mais longos; assim, a saída pode ser mais larga que o terminal. Se você quiser levar em conta a largura do terminal, use:

COLUMNS=$COLUMNS dpkg -l | grep ...

Observe que a variável do shell $COLUMNS não é exportada por padrão (ou seja, não é uma variável de ambiente) e COLUMNS=$COLUMNS tem o efeito de fornecer COLUMNS como uma variável de ambiente para o dpkg.

    
por 11.07.2014 / 00:52