Я хочу написать bash-скрипт, который печатает некоторую информацию в терминал STDOUT. Для лучшей читабельности и структуры я хотел бы выделить цветом различные элементы и выделить их таким образом.
Существует ли эквивалент Bash команде Windows-CMD/DOS COLOR
, которая устанавливает текущий цвет фона и шрифта? И как мне вернуть цвет обратно к терминальному по умолчанию после завершения моего сценария?
Edit:
Я прочитал Pipable команда для цветной печати?, но только некоторые ответы написаны на Bash, чтобы их можно было легко включить в мой скрипт. Кроме того, в ответах отсутствуют следующие пункты, которые мне нужны:
gnome-terminal
(для меня это неоново-зеленый) Вы могли использовать tput
tput setaf <color>
, выбирает основной цвет tput setab <color>
, выбирает цвет фона , цвета составляют 1 бит b, g, r:
0. black 1. red 2. green 3. yellow 4. blue 5. magenta 6. cyan 7. white
tput может установить другие атрибуты символов, таких как подчеркивание, полужирное, мигание и т.д. см. man terminfo
для получения дополнительной информации.
я думаю, что хороший способ использовать это путем установки переменных shemantically. т.е.
startheader=`tput setaf 0``tput setab 7` endheader=`tput sgr0` startprompt=`tput bold` endprompt=$endheader echo ${startheader}The Header${endheader} echo -n ${startprompt}Enter value: ${endprompt} read value
Маленький сценарий для получения загадочных кодов ;)
#!/bin/bash
#
# This file echoes a bunch of color codes to the
# terminal to demonstrate what's available. Each
# line is the color code of one forground color,
# out of 17 (default + 16 escapes), followed by a
# test use of that color on all nine background
# colors (default + 8 escapes).
#
T='gYw' # The test text
echo -e "\n 40m 41m 42m 43m\
44m 45m 46m 47m";
for FGs in ' m' ' 1m' ' 30m' '1;30m' ' 31m' '1;31m' ' 32m' \
'1;32m' ' 33m' '1;33m' ' 34m' '1;34m' ' 35m' '1;35m' \
' 36m' '1;36m' ' 37m' '1;37m';
do FG=${FGs// /}
echo -en " $FGs \033[$FG $T "
for BG in 40m 41m 42m 43m 44m 45m 46m 47m;
do echo -en "$EINS \033[$FG\033[$BG $T \033[0m";
done
echo;
done
echo
Код легко прочитать из таблицы, которая генерировала предыдущий сценарий.
\e[1;37m\e[44m
\e[1;37m
– Передний план
\e[44m
– Фон
Некоторые примеры
Белый передний план
TOA="\e[0m" # No Color
whiteForeground="\e[1;37m"
echo -e "${whiteForeground}foo${TOA}"
Белый на синем
TOA="\e[0m" # No Color
whiteOnBlue="\e[1;37m\e[44m"
echo -e "${whiteOnBlue}foo${TOA}"
И демонстрационный сценарий удара:
red="\e[0;31m"
green="\e[0;32m"
yellow="\e[0;33m"
blue="\e[0;34m"
TOA="\e[0m" # No Color
if [[ $cfg_log_level == "" ]]; then
cfg_log_level=4
fi
function logError () {
if [[ $cfg_log_level == "1" ]] || [[ $cfg_log_level == "2" ]] || [[ $cfg_log_level == "3" ]] || [[ $cfg_log_level == "4" ]]; then
echo -e "${red}$1${TOA}" 1>&2
fi
}
function logWarn () {
if [[ $cfg_log_level == "2" ]] || [[ $cfg_log_level == "3" ]] || [[ $cfg_log_level == "4" ]]; then
echo -e "${yellow}$1${TOA}" 1>&2
fi
}
function logInfo () {
if [[ $cfg_log_level == "3" ]] || [[ $cfg_log_level == "4" ]]; then
echo -e "${green}$1${TOA}" 1>&2
fi
}
function logDebug () {
if [[ $cfg_log_level == "4" ]]; then
echo -e "${blue}$1${TOA}" 1>&2
fi
}