O que 'export COLUMNS' faz?

4

Qual é o significado da importância do comando export COLUMNS ?

O que eu sei é que é uma variável global.

Eu vejo isso no começo dos scripts * nix.

    
por chrisjlee 25.08.2011 / 18:19

3 respostas

2

É a largura da sua janela de terminal atual medida como o número de caracteres ASCII.

De man bash :

   COLUMNS
          Used  by  the  select  builtin command to determine the terminal
          width when printing selection  lists.   Automatically  set  upon
          receipt of a SIGWINCH.

Também no mais genérico ksh :

          COLUMNS
                 If this variable is set, the value is used to define  the
                 width of the edit window for the shell edit modes and for
                 printing select lists.

Para a parte prática, observe que o valor dessa variável muda quando as dimensões de sua janela de terminal virtual mudam. (Isto é quando o SIGWINCH acima mencionado é enviado para o shell ativo).

    
por 25.08.2011 / 20:29
2

Esta resposta é uma espécie de adivinhação, já que você não disse em que tipo de sistema você vê isso, Solaris, HP-UX, AIX, um BSD, Linux (que distro?), etc ... / p>

Os scripts de shell que fizeram interação no estilo curses com os usuários definiam as variáveis de ambiente ROWS e COLUMNS no passado.

A interatividade no estilo das maldições data de antes dos sistemas de janelas, então esses programas normalmente não faziam o que fosse necessário para entender o tamanho de uma janela xterm. Então, muitos programas baseados em curses usaram variáveis de ambiente ROWS e COLUMNS para decidir como criar seus campos e rótulos.

Às vezes, os shells tentavam encontrar e definir as variáveis de ambiente ROWS e COLUMNS quando começaram a rodar em um xterm. Muitos sistemas SunOS e Solaris mais antigos teriam o / etc / profile fazendo isso. Às vezes, um SIGWINCH (no SunOS e no Solaris, pelo menos) se acostumava a definir as variáveis ROWS e COLUMNS. Os vendedores costumavam modificar o xterm de maneira tola, e muitas vezes arruinavam passar o SIGWINCH para o grupo de processos em execução em um xterm, e a interação no estilo curses ficaria muito ruim.

    
por 25.08.2011 / 18:53
1

Literalmente, ele diz a certas aplicações o número de posições de caracteres às quais a largura do terminal corresponde. Quase todos os terminais usam uma grade regular de linhas e colunas .

LINES e COLUMNS eram originalmente (por volta de 1980) variáveis internas em vi e curses . Mais tarde, variáveis do shell com esses nomes foram introduzidos. Enquanto eles podem ter sido suportados no SunOS4, a única menção nas páginas de manual é para maldições e ls :

In order to determine output formats for the -C, -x, and -m options, /usr/5bin/ls uses an environment variable, COLUMNS, to determine the number of character positions available on one output line. If this variable is not set, the terminfo database is used to determine the number of columns, based on the environment variable TERM. If this information cannot be obtained, 80 columns are assumed.

Ou seja, o recurso veio do System V e parece ter sido apresentado mais tarde, por exemplo, este commit em 1989 , para a versão BSD de ls .

O SVr4 curses (e seu sucessor X / Open Curses) documenta o uso das variáveis ambiente LINES e COLUMNS , que podem ser usadas para anular os valores da descrição do terminal para o tamanho do terminal, para a função use_env . A página de manual ncurses documenta esse recurso.

Da mesma forma, sua introdução à programação de shell parece ter vindo do System V, em ksh . Quando e como SIGWINCH foi combinado com essas variáveis, é elusivo, provavelmente discutível. No entanto, em shells current em mãos, estas variáveis shell ( não variáveis de ambiente ) são respondidas em SIGWINCH : ksh93 , bash . Parece que zsh o define sem SIGWINCH (da mesma forma fish ). Verificando o Solaris 10, ksh88 não definiu as variáveis.

O antigo changelog no bash 1.13 (lançado em setembro de 1993) dizia que o recurso SIGWINCH foi adicionado em março de 1993, enquanto Sven Mascheck implica que o ksh93 foi lançado no final do mesmo ano.

Ter o valor em uma variável shell facilita a exportação (e a alteração para uma variável de ambiente) e modifica o comportamento de determinados programas. Mas a razão para a variável veio de sua utilidade quando os tamanhos de terminal eram difíceis de determinar.

    
por 03.11.2016 / 01:26

Tags