zsh e COLUMNS

3

Não consigo entender o comportamento da variável $COLUMNS em zsh . Aqui está um exemplo do tipo de comportamento que estou me referindo. O script $HOME/cols.sh é o seguinte:

echo "COLUMNS=$COLUMNS"
set | grep -a COLUMNS
COLUMNS=
echo "COLUMNS=$COLUMNS"
set | grep -a COLUMNS

Eu obtenho resultados diferentes dependendo da execução deste script com env -i zsh ou env -i =zsh :

% env -i zsh -flc '. ~/cols.sh'
COLUMNS=80
COLUMNS=80
COLUMNS=0
COLUMNS=0

% env -i =zsh -flc '. ~/cols.sh'
COLUMNS=80
COLUMNS=80
COLUMNS=80
COLUMNS=80

Estou intrigado com

  1. O fato de usar zsh e =zsh leva a resultados diferentes;
  2. O fato de que, no primeiro caso, definir COLUMNS= parece ser equivalente a definir COLUMNS=0 ;
  3. O fato de que, no segundo caso, definir COLUMNS= parece não ter efeito algum;

Os documentos não esclarecem muito estas questões:

COLUMNS <S>
       The number of columns for this terminal session.  Used for printing select lists and
       for the line editor.

FWIW,

% which zsh
/usr/local/bin/zsh
% echo =zsh
/usr/local/bin/zsh
% =zsh --version
zsh 5.0.2 (x86_64-apple-darwin11.4.2)
    
por kjo 17.08.2013 / 01:13

1 resposta

0

Veja o que está acontecendo.

Primeiro, COLUMNS, como você deve saber, é uma variável que informa a largura da tela do terminal. Às vezes, o shell o define para você, portanto, configurá-lo com COLUMNS= para obter o shell para atualizar o valor para o número real de colunas no terminal que ele detecta.

Em segundo lugar, este comando executa um zsh e processa o script:

env -i zsh -flc '. ~/cols.sh'

Terceiro, esse comando executa um shell diferente (o mesmo do qual ele é executado ou o valor de $ SHELL, acredito) e, em seguida, o processa; o =zsh é praticamente ignorado:

env -i =zsh -flc '. ~/cols.sh'

Na verdade, isso faz parecer que o =zsh pode realmente ter um efeito, mas não consigo ver como isso seria útil, pois não acredito que algum shell suporte um nome de variável de ambiente "vazio":

env -i =zsh env

A saída é =zsh , o que implica que existe uma variável sem nome definido como zsh .

    
por 05.09.2013 / 08:31