se a instrução em .bashrc não estiver funcionando corretamente

6

Eu configurei .bashrc para mostrar um prompt longo se o terminal tiver pelo menos 80 caracteres de largura. Caso contrário, ele mostrará um aviso menor e menor.

Eu uso uma declaração if para conseguir isso:

dp_smaller_than=80
if [ $COLUMNS -lt $dp_smaller_than ]
then
    PROMPT_COMMAND="degr_prompt"
else
    PROMPT_COMMAND="full_prompt"
fi

Ele só funciona corretamente se eu colocar um sleep 0 ou outro comando antes desta declaração, caso contrário, mostrará o seguinte erro:

[: -lt: unary operator expected

Observação: tenho as funções degr_prompt e full_prompt definidas no início do arquivo.

    
por psimon 24.06.2014 / 16:05

2 respostas

10
A variável

COLUMNS é definida por bash upon receipt of a SIGWINCH. (consulte a seção Shell Variables em man bash ). Não está definido no seu script porque não é uma variável de ambiente. Veja você mesmo:

$ export COLUMNS=$COLUMNS
$ ./your-script.sh

Agora funciona. Você precisa recuperar o valor de COLUMNS em seu script. Você pode usar tput , por exemplo:

$ tput cols
186
    
por 24.06.2014 / 16:30
5

COLUMNS não está definido de alguma forma em .bashrc .

Basta colocar as colunas por meio de tput cols da seguinte forma:

dp_smaller_than=80
if [ $(tput cols) -lt $dp_smaller_than ]
then
    PROMPT_COMMAND="degr_prompt"
else
    PROMPT_COMMAND="full_prompt"
fi
    
por 24.06.2014 / 16:18