Нестандартный вывод команды `tput sgr0`

У меня несколько VPS-серверов Ubuntu 22.04.5 LTS. На всех серверах есть скрипт, содержащий команду: sgr0 > tput.out (сбрасывает настройки терминала к дефолтным значениям).

Правильный выходной код — ^[[m , который прописывается в файле . Но на одном сервере та же команда почему-то записывает этот код с дополнительными символами: ^[(B ^[[m.

Что может быть причиной вывода этих дополнительных символов?

Может быть, это связано с настройками терминала на данном сервере? Или же проблема кроется в чём-то другом? Как это исправить?


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

Автор решения: Oopss

Предположу что это не выходные коды, а как раз управляющие коды.
Эти коды часто состоят из нескольких символов, но все они начинаются с "^[". Это не два символа ^ и [, а представление ASCII-кода ESC (поэтому они и называются escape codes или "эскейп последовательности").

^[[m - modesoff SGR0 Turn off character attributes

Чтобы код выполнился можно запустить echo -e \033[m

^[(B - setusg0 Set United States G0 character set

Тоже echo -e \033(B

\033 - восмеричный код 27 (ESC)
Справедливо для VT100 terminal

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

Я знаю два варианта управления цветом.

Первый:

txtred='\e[0;31m' # Red
txtgrn='\e[0;32m' # Green
txtylw='\e[0;33m' # Yellow
txtrst='\e[0m' # reset

вывести anytext зеленым:

$ echo -e  "${txtgrn}anytext${txtrst}"

и такой подход работает на всех серверах правильно.

Второй:

RED=$(tput setaf 1)
GREEN=$(tput setaf 2)
YELLOW=$(tput setaf 3)
RESET=$(tput sgr0)

вывести anytext зеленым:

$ echo -e "${GREEN}anytext${RESET}"

Этот метод тоже работает, но он создаёт проблемы с форматированием текста из-за упомянутого выше. Хочется понять причину.

→ Ссылка