Я не знаю, является ли это предполагаемым поведением, но кажется, что этого можно избежать, используя переменную GLOBIGNORE
для ограничения этих шаблонов:
$ echo test/orig/!(.sub)
test/orig/. test/orig/.. test/orig/file2
$ GLOBIGNORE='?(*/)@(.|..)*(/)'; echo test/orig/!(.sub)
test/orig/file2
Вы имеете в виду команду , которая ожидает значений 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
, как показано на этом снимке экрана:
(Вероятно, вы видите, что 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: