Я пишу:

  $ infocmp -1 xterm
        ...
    colors#8,
    bold=\E[1m,
    blink=\E[5m,
        ...
  $ tput -Txterm colors && echo OK || echo err
8
OK
  $ tput -Txterm blink && echo OK || echo err
^[[5mOK

Так что я могу использовать tput для проверки возможностей ретинала.

Это портативное устройство? Есть ли другие решения?

Или, может быть, я могу застрять с решением:

  $ [ $TERM = xterm ] && echo ok || echo err
ok

Одно из применений - установить PS1 в .bashrc. Другой для выделения вывода, чтобы привлечь внимание от скрипта sh. Я могу использовать такое решение:

PS1='bash# '
case "$TERM" in
  xterm*) PS1='\[\033[35m\]bash# \[\033[0m\]'
  ;;
esac

которая использует только встроенную команду bash (настолько эффективна) и работает для всех моих случаев, но, к сожалению, не переносима.

2 ответа2

4

Да, это портативный. Как насчет этого:

# 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
1

Использование tput переносимо для большого количества операционных систем.

Однако проверка кода возврата говорит только о том, есть ли в базе данных terminfo платформы определение этой возможности в записи для 'xterm'.

Код возврата не сообщает вам, действительно ли используемый в настоящее время клиент xterm поддерживает эту возможность.

Обратите внимание, что существует большое разнообразие программ, которые утверждают, что они совместимы с xterm. Вполне вероятно, что не все они поддерживают все функции 'xterm', особенно если учесть, что было выпущено несколько последовательных версий эталонной реализации xterm и, возможно, некоторые вилки. Сопровождающий xterm говорит:«Ни один из них не реализует до половины элементов управления xterm».

Насколько мне известно, ни один из обычных органов по стандартизации (ANSI, ECMA, The Open Group) не опубликовал стандарт, определяющий xterm. Текущий сопровождающий xterm также поддерживает тестовую программу vt100 (vttest), чтобы помочь с его работой xterm.

Поэтому, вероятно, приложение не сможет использовать значение TERM, чтобы быть уверенным, что терминал, объявленный как xterm, на самом деле поддерживает определенную функцию xterm. По крайней мере, не для произвольного выбора функции xterm. Если вы задействуете человека (насколько я помню, это сделал vttest), у вас может быть больше шансов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .