
Я пишу:
$ infocmp -1 xterm ... цвета#8, жирный=\E[1м, мигание=\E[5м, ... $ tput -Txterm colors && echo OK || echo err 8 ХОРОШО $ tput -Txterm мигает && echo OK || echo err ^[[5мОК
Так что я могу использоватьtputдля проверки возможностей сетчатки.
Это решение портативное? Есть ли другие решения?
Или, может быть, я могу остановиться на решении:
$ [ $TERM = xterm ] && echo ok || echo err хорошо
Одно из применений — установить PS1 в .bashrc. Другое — для выделения вывода, чтобы отвлечь внимание от скрипта sh. Я могу использовать такое решение:
PS1='баш#' случай "$TERM" в xterm*) PS1='\[\033[35m\]bash# \[\033[0m\]' ;; есак
который использует только встроенные команды bash (настолько эффективный) и подходит для всех моих случаев, но, к сожалению, не является переносимым.
решение1
Использование tput
переносимо на большое количество операционных систем.
Однако проверка кода возврата позволяет узнать только, есть ли в базе данных terminfo платформы определение этой возможности в записи для «xterm».
Код возврата не сообщает, поддерживает ли текущий клиент «xterm» эту возможность.
Обратите внимание, что существует большое разнообразие программ, которые утверждают, что онисовместимо с 'xterm'. Конечно, вероятно, что не все они поддерживают все функции 'xterm', особенно учитывая, что было выпущено несколько последовательных версий эталонной реализации xterm и, возможно, несколько форков. Сопровождающий xterm говорит: "Ни одна из них не реализует как минимум половину элементов управления xterm".
Насколько мне известно, ни один из обычных органов стандартизации (ANSI, ECMA, The Open Group) не опубликовал стандарт, определяющий xterm. Текущий разработчик xterm также поддерживаеттестовая программа vt100 (vttest)для оказания помощи в его работе во внеочередном периоде.
Итак, вероятно, само приложение не может использовать значение TERM, чтобы убедиться, что терминал, заявленный как xterm, на самом деле поддерживает определенную функцию xterm. По крайней мере, не для произвольного выбора функции xterm. Если вы привлекаете человека (как, я помню, делал vttest), у вас может быть больше шансов.
решение2
Да, он портативный. Как насчет этого:
# BASH : Configure things differently if current terminal has >= 8 colors.
if which tput > /dev/null 2>&1 && [[ $(tput -T$TERM colors) -ge 8 ]]; then
echo "Configure stuff to use colors here!"
else
echo "No tput or less than 8 colors, default to no coloring"
fi