Подсвечивание текста в Bash
При выводе информации пользователю в командной строке, хорошей практикой является подсвечивание текста в зависимости от типа. К примеру, ошибки выводить красным текстом, предупреждения жёлтым, а успешные действия зелёным.
Для вывода текста в цвете будет использована команду tput
. Изменение цвета достигается с помощью
tput setf N
где N=0-6 номер цвета по базе данных terminfo
.
Стандартные для значения:
- 0 - Черный
- 1 - Синий
- 2 - Зеленый
- 3 - Голубой
- 4 - Красный
- 5 - Пурпурный
- 6 - Желтый
- 7 - Белый
Но значения могу отличаться.
Изменение цвета фона достигается с помощью опции setb
. Значение цветов такое же, как и у опции setf
.
К примеру, для установки жёлтого текста необходимо выполнить
tput setf 6
После этого текст будет выделяться жёлтым. Для возврата в стандартное значение, необходимо выполнить
tput sgr0
А для установки белого фона и синего текста:
tput setf 1
tput setb 7
Теперь настало всё это оформить в виде функции, чтобы каждый раз не выводить руками.
Для этого можно использовать следующую функцию
notice()
{
yellow=$(tput setf 6)
red=$(tput setf 4)
green=$(tput setf 2)
reset=$(tput sgr0)
toend=$(tput hpa $(tput cols))$(tput cub 6)
case "$2" in
"success")
echo -n "${green}${1}"
;;
"error")
echo -n "${red}${1}"
;;
*)
echo -n "${yellow}${1}"
;;
esac
echo -n "${reset}"
echo
}
В начале происходит установка переменных с цветами для более удобной работы, далее на основе переданного второго аргумента, выводится текст, который передаётся первым аргументов, в нужном цвете. В конце мы сбрасывает до стандартного значения.
Использовать функцию в скрипте можно следующим образом:
notice "text" "type"
К примеру, вывод информации об ошибке будет выглядеть следующим образом:
notice "Error!" "error"