Нестандартный вывод команды `tput sgr0`
У меня несколько VPS-серверов Ubuntu 22.04.5 LTS. На всех серверах есть скрипт, содержащий команду: sgr0 > tput.out
(сбрасывает настройки терминала к дефолтным значениям).
Правильный выходной код — ^[[m
, который прописывается в файле . Но на одном сервере та же команда почему-то записывает этот код с дополнительными символами: ^[(B ^[[m
.
Что может быть причиной вывода этих дополнительных символов?
Может быть, это связано с настройками терминала на данном сервере? Или же проблема кроется в чём-то другом? Как это исправить?
Ответы (2 шт):
Предположу что это не выходные коды, а как раз управляющие коды.
Эти коды часто состоят из нескольких символов, но все они начинаются с "^[". Это не два символа ^ и [, а представление 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
Я знаю два варианта управления цветом.
Первый:
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}"
Этот метод тоже работает, но он создаёт проблемы с форматированием текста из-за упомянутого выше. Хочется понять причину.