Почему после одноразовой смены текста цвета вывода echo, цвет меняется на весь скрипт
Допустим есть скрипт
#!/bin/bash
apt update -y
echo -e "\033[31mОбновление выполнено"
apt upgrade -y
Сначала идёть стандартный вывод логов обновления из команды apt update -y затем красным цветом выводиться Обновление выполнено но затем идёт вывод команды apt upgrade -y но почему-то вывод логов идёт полностью красным цветом. Вопрос почему текст логов команды apt upgrade -y красного цвета и как это исправить?
Ответы (2 шт):
Всё работает верно, так и должно быть. Про цвета в консольных программах вы можете почитать подробнее вот здесь: habr
Вам просто необходимо повторно задать нужный вам цевет после завершение работы программы. Сделать это можно следующим образом:
#!/bin/bash
apt update -y
echo -e "\033[31mОбновление выполнено"
echo "\033[0m" #возвращаем все цвета по умолчанию.
apt upgrade -y
[если мой ответ вам помог, то проголосуйте за него и отметьте как верный]
У вас есть стандартный поток вывода, который имеет некоторое состояние. Можно упрощенно представить, что туда можно записать как данные, так и "команды"(Escape Sequences). Эти команды меняют состояние потока вывода, а не форматируют конкретную строку, с которой они передаются. Таким образом, чтобы изменить состояние потока, ему надо опять дать команду, например, сброс стилей и цветов([0m).