Эквивалент «цвета a», «цвета b» для Windows на терминале bash

Я не знаю, является ли это предполагаемым поведением, но кажется, что этого можно избежать, используя переменную GLOBIGNOREдля ограничения этих шаблонов:

$ echo test/orig/!(.sub)
test/orig/. test/orig/.. test/orig/file2
$ GLOBIGNORE='?(*/)@(.|..)*(/)'; echo test/orig/!(.sub)
test/orig/file2
2
09.04.2020, 09:25
1 ответ

Вы имеете в виду команду , которая ожидает значений 0 -f (т. е. от 0 до 15 десятичных ). Аналогичная команда будет использоватьtput:

tput setaf 10

(«a» — шестнадцатеричное число для 10 ), для цвета переднего плана и

tput setab 10

для цвета фона . Это отдельные возможностиterminfo .

В этом примере предполагается, что описание вашего терминала содержит как минимум 16 цветов. Если их всего 8, tputне заметит, но результат будет неудовлетворительным. Вы можете увидеть это по

tput colors

По умолчанию tputиспользует текущее значение $TERMдля выбора описания клеммы. Вы можете изменить это с помощью опции -T. Например, если вы используетеxterm(в отличие от какого-либо другого терминала, который устанавливает TERMв "xterm" ), вы можете использовать описание терминала xterm-16color, как показано на этом снимке экрана:

enter image description here

(Вероятно, вы видите, что tputв строке 15 не имеет никакого полезного эффекта, чего и следовало ожидать, поскольку10находится за пределами диапазона 8 цветов ).

Описание терминала, будь тоxtermилиxterm-16color(или xterm-256color), сообщает tput, как создать управляющую последовательность, которую можно записать на терминал. Ваша подсказка bash также может отправлять escape-последовательности, устанавливая или сбрасывая цвета. Если вы вызвали tputи отобразили текст в сценарии оболочки, вы можете увидеть цветной текст, в то время как те же самые команды (, разделенные подсказками bash ), могут вести себя по-разному. Кроме того, некоторые программы (, такие как ls), устанавливают/сбрасывают цвета. Существует только одно состояние цвета -терминала, которым можно поделиться с этими различными приложениями; терминалы не переключаются между ними автоматически.

Тестирование сценария оболочки более предсказуемо, чем использование деталей приглашения оболочки.Вот пример

#!/bin/sh
case $TERM in
xterm*)
        TERM=xterm-256color
        ;;
linux*)
        TERM=linux-16color
        ;;
esac
export TERM
for p in $(seq 0 15)
do
        tput setab $p
        for q in $(seq 0 15)
        do
                tput setaf $q
                printf '%x%x' $p $q
        done
        tput sgr0
        printf '\n'
done

и скриншот в xterm:

enter image description here

6
28.04.2021, 23:18

Теги

Похожие вопросы