Почему после одноразовой смены текста цвета вывода echo, цвет меняется на весь скрипт

Допустим есть скрипт

#!/bin/bash
apt update -y
echo -e "\033[31mОбновление выполнено"
apt upgrade -y

Сначала идёть стандартный вывод логов обновления из команды apt update -y затем красным цветом выводиться Обновление выполнено но затем идёт вывод команды apt upgrade -y но почему-то вывод логов идёт полностью красным цветом. Вопрос почему текст логов команды apt upgrade -y красного цвета и как это исправить?


Ответы (2 шт):

Автор решения: ZerxaFun aKa Zerxa

Всё работает верно, так и должно быть. Про цвета в консольных программах вы можете почитать подробнее вот здесь: habr

Вам просто необходимо повторно задать нужный вам цевет после завершение работы программы. Сделать это можно следующим образом:

#!/bin/bash
apt update -y
echo -e "\033[31mОбновление выполнено"
echo "\033[0m" #возвращаем все цвета по умолчанию.
apt upgrade -y

[если мой ответ вам помог, то проголосуйте за него и отметьте как верный]

→ Ссылка
Автор решения: user207200

У вас есть стандартный поток вывода, который имеет некоторое состояние. Можно упрощенно представить, что туда можно записать как данные, так и "команды"(Escape Sequences). Эти команды меняют состояние потока вывода, а не форматируют конкретную строку, с которой они передаются. Таким образом, чтобы изменить состояние потока, ему надо опять дать команду, например, сброс стилей и цветов([0m).

→ Ссылка