Оператор if в .bashrc работает неправильно

Оператор if в .bashrc работает неправильно

Я настроил .bashrcпоказ длинного приглашения, если ширина терминала составляет не менее 80 символов. В противном случае он показывает ухудшенное, меньшее приглашение.

ifДля достижения этого я использую следующее утверждение:

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

Он работает правильно только в том случае, если я помещаю sleep 0перед этим оператором команду или другую команду, в противном случае выводится следующая ошибка:

[: -lt: unary operator expected

Примечание:У меня функции degr_promptи full_promptопределены в начале файла.

решение1

COLUMNSпеременная задается bash upon receipt of a SIGWINCH.(см. Shell Variablesраздел в man bash). Она не задается в вашем скрипте, поскольку это не переменная окружения. Смотрите сами:

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

Теперь это работает. Вам нужно получить значение COLUMNSв вашем скрипте. Вы можете использовать, tputнапример:

$ tput cols
186

решение2

COLUMNSне установлен каким-либо образом в .bashrc.

Просто получите столбцы следующим tput colsобразом:

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

Связанный контент