
Я настроил .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