instrução if em .bashrc não está funcionando corretamente

instrução if em .bashrc não está funcionando corretamente

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

Eu uso uma ifdeclaração para conseguir isso:

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

Só funciona corretamente se eu colocar um sleep 0ou outro comando antes desta instrução, caso contrário mostra o seguinte erro:

[: -lt: unary operator expected

Observação:Eu tenho as funções degr_prompte full_promptdefinidas no início do arquivo.

Responder1

COLUMNSvariável é definida pelo bash upon receipt of a SIGWINCH.(veja Shell Variablesa seção 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 COLUMNSem seu script. Você pode usar tputpor exemplo:

$ tput cols
186

Responder2

COLUMNSnão está definido de alguma forma em .bashrc.

Basta obter as colunas tput colsassim:

dp_smaller_than=80
if [ $(tput cols) -lt $dp_smaller_than ]
then
    PROMPT_COMMAND="degr_prompt"
else
    PROMPT_COMMAND="full_prompt"
fi

informação relacionada