В ОС Windows я могу ввести просто color a
или color b
или color c
и т. д., чтобы временно изменить цвет шрифта в терминале.
Есть ли команда для этого в терминале bash?
Я не хочу вносить постоянные изменения, достаточно только для открытой сессии.
решение1
Вы имеете в видукомандакоторый ожидает значения 0-f (т.е. от 0 до 15 в десятичной системе). Аналогичная команда будет использоватьtput
:
tput setaf 10
("a" - шестнадцатеричное число для 10), дляпередний планцвет и
tput setab 10
дляфонцвет. Это отдельныетерминфовозможности.
Этот пример предполагает, что описание вашего терминала имеет не менее 16 цветов. Если у него только 8, tput
вы этого не заметите, но результат будет неудовлетворительным. Вы можете увидеть это по
tput colors
По умолчанию tput
использует текущее значение $TERM
для выбора описания терминала. Вы можете переопределить это с помощью -T
параметра. Например, если вы используетеxterm
(в отличие от некоторых других терминалов, которые устанавливаются TERM
как «xterm»), вы можете использовать xterm-16color
описание терминала, как показано на этом снимке экрана:
(Вы, вероятно, видите, что tput
строка 15 не оказала никакого полезного эффекта, что и ожидалось, поскольку10
находится за пределами диапазона 8 цветов).
Описание терминала, будь тоxterm
илиxterm-16color
(илиxterm-256color
) рассказывает, tput
как создать escape-последовательность, которую можно записать в терминал. Ваша подсказка 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: