Как изменить цвет вывода echo в Linux
Я пытаюсь вывести текст в терминале с помощью команды echo.
Я хочу, чтобы текст был напечатан красным цветом. Как мне это сделать?
5 ответ(ов)
Вы можете использовать команду tput
с возможностью setaf
и параметром 1
, чтобы установить цвет текста в красный. Вот пример, как это можно сделать:
echo "$(tput setaf 1)Hello, world$(tput sgr0)"
В этом примере tput setaf 1
задает цвет текста на красный (где 1
соответствует красному цвету), а tput sgr0
сбрасывает все атрибуты текста к настройкам по умолчанию, чтобы следующий текст выводился в стандартном цвете. Таким образом, "Hello, world" будет отображаться красным, а все последующие строки будут иметь стандартный цвет.
Если вы хотите улучшить читаемость кода, вы можете сначала использовать echo
для вывода строки, а затем добавить цвет с помощью sed
:
echo 'Hello World!' | sed $'s/World/\e[1m&\e[0m/'
Этот подход позволяет более четко отделить логику вывода текста от форматирования, что делает код легче воспринимаемым.
Чтобы вывести сообщение с различным цветом, вы можете использовать следующую команду:
echo -e "\033[31;1mВаше сообщение\033[0m"
Вот таблица доступных цветов:
- Черный: 0;30 | Темно-серый: 1;30
- Красный: 0;31 | Светло-красный: 1;31
- Зеленый: 0;32 | Светло-зеленый: 1;32
- Коричневый/Оранжевый: 0;33 | Желтый: 1;33
- Синий: 0;34 | Светло-синий: 1;34
- Пурпурный: 0;35 | Светло-пурпурный: 1;35
- Циан: 0;36 | Светло-циан: 1;36
- Светло-серый: 0;37 | Белый: 1;37
Используйте соответствующий код цвета в строке, чтобы изменить цвет текста в вашем сообщении.
Чтобы использовать цвета в Bash-скриптах, рекомендую воспользоваться утилитой tput
, чтобы вычислять коды цветов. Это более переносимый подход, который избежит проблем с ANSI-кодами (например, \E[31;1m
для красного), которые могут не поддерживаться в некоторых средах, таких как Bash на OS X.
Вот пример, как это можно сделать:
BLACK=`tput setaf 0`
RED=`tput setaf 1`
GREEN=`tput setaf 2`
YELLOW=`tput setaf 3`
BLUE=`tput setaf 4`
MAGENTA=`tput setaf 5`
CYAN=`tput setaf 6`
WHITE=`tput setaf 7`
BOLD=`tput bold`
RESET=`tput sgr0`
echo -e "hello ${RED}some red text${RESET} world"
В этом скрипте мы используем tput setaf
для установки цветового кода, а tput sgr0
для сброса атрибутов к терминалу. Эти команды адаптируются к различным терминалам, что делает ваш код более совместимым и удобным для использования в различных операционных системах.
Вы можете использовать следующий скрипт, чтобы увидеть все комбинации цветов и решить, какие из них выглядят хорошо:
for (( i = 0; i < 8; i++ )); do
for (( j = 0; j < 8; j++ )); do
printf "$(tput setab $i)$(tput setaf $j)(b=$i, f=$j)$(tput sgr0)\n"
done
done
Этот код создает цикл, который перебирает значения от 0 до 7 для фона (i) и цвета текста (j). Используя команды tput
, он устанавливает фоновый и текстовый цвет, а затем выводит их комбинацию в формате (b=i, f=j)
. $(tput sgr0)
сбрасывает цвета обратно к стандартным. Это поможет вам визуально оценить, как выглядят различные сочетания цветов.
Echo новой строки в Bash выводит литерал \n
Как перенаправить вывод в файл и на экран (stdout)
Почему переменные нельзя объявлять в операторе switch?
Что такое ошибка сегментации?
Получение текущего времени в секундах с начала эпохи в Linux, Bash