Команды управления терминалом
https://drmini.ru/computers/os/ansi-escape-color-code.html
http://citforum.ru/nets/semenov/10/color_tab.shtml
https://habr.com/ru/post/119436/
https://wiki.archlinux.org/index.php/Bash
https://losst.ru/tsveta-terminala-linux <------- полезно
http://manpages.ubuntu.com/manpages/precise/dir_colors <-----------------
Если совсем нечего делать:
$ for code in {0..255}; do echo -e "\e[38;05;${code}m $code: Terminal Colors"; done | pr -T3 -W$COLUMNS
Скрипт для вывода управляющих Esc-последовательностей для раскрашивания текста в терминале.
$ printf "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n" $(
for i in {0..128}
do
echo -ne "\e["$i"mКод${i}\e[0m "
done)
$ ~ trup setaf [...] echo "........"
....................................
$ ~ for i in `seq 1 7`; do tput setaf $i; echo "TPUT CHECK $1"; done
TPUT CHECK 1
TPUT CHECK 2
TPUT CHECK 3
TPUT CHECK 4
TPUT CHECK 5
TPUT CHECK 6
TPUT CHECK 7
$ ~ trup sgr0 # восстановит умолчания
$ ~ tput -help
Usage: tput [options] [command]
Options:
-S << read commands from standard input
-T TERM use this instead of $TERM
-V print curses-version
-x do not try to clear scrollback
Commands:
clear clear the screen
init initialize the terminal
reset reinitialize the terminal
capname unlike clear/init/reset, print value for capability "capname"
$ ~ man tput
tput(1) General Commands Manual tput(1)
NAME
tput, reset - initialize a terminal or query terminfo database
SYNOPSIS
tput [-Ttype] capname [parameters]
tput [-Ttype] [-x] clear
tput [-Ttype] init
tput [-Ttype] reset
tput [-Ttype] longname
tput -S <<
tput -V
DESCRIPTION
The tput utility uses the terminfo database to make the values of terminal-dependent capabili?
ties and information available to the shell (see sh(1)), to initialize or reset the terminal, or
return the long name of the requested terminal type. The result depends upon the capability's
type:......................................................
Что такое tput
Команда tput инициализирует и управляет вашими сеансами работы с терминалом, используя базу данных terminfo. С помощью tput вы можете управлять различными функциями терминала, такими как перемещение или изменение вида курсора, изменение свойств текста и очистка определенных областей экрана терминала.
Что такое база данных terminfo
http://citforum.ru/operating_systems/linux/HOWTO/Text-Terminal-HOWTO
https://www.ibm.com/support/knowledgecenter/ru/terminfo
База данных terminfo в системе UNIX задает атрибуты и переменные терминала и принтера, включая такие параметры, как количество строк и столбцов на соответствующем устройстве и атрибуты выводимого текста. Для определения этих и других атрибутов базу данных terminfo используют такие широко известные UNIX-программы, как текстовые редакторы vi и emacs, а также программы curses и man.
$ ~ infocmp
# Reconstructed via infocmp from file: /usr/share/terminfo/x/xterm
xterm|xterm terminal emulator (X Window System),
am, bce, km, mc5i, mir, msgr, npc, xenl,
colors#8, cols#80, it#8, lines#24, pairs#64,
............................................
**** termcap - текстовая база данных /etc/termcap,
terminfo же бинарная - /usr/share/terminfo/*/*, и вроде современнее и быстрее, хотя в системе могут присутствовать обе. для Linux родная - terminfo, для FreeBSD - termcap.
Применение команды tput
Чтобы применить команду tput, следует инициализировать установки терминала, обращаясь к команде tput с помощью сценариев или командной строки.
$ tput init
Команда tput генерирует три различных потока вывода: строки, числовые и булевы значения (истина/ложь). Далее будут рассмотрены некоторые наиболее часто используемые свойства каждого потока вывода.
Потоки вывода данных, часто употребляемые:
Строчный:
Числовой:
Булев:
Название Значение
chts Курсор трудно заметить
hs Имеет строку статуса
Чтобы применить булев поток вывода для команды tput, воспользуйтесь конструкцией if:
STATUS_LINE=`tput hs`
if $STATUS_LINE; then
echo "your terminal has a status line"
else
echo "your terminal has NO status line"
fi
Использование команды tput в сценариях
В приведенном сценарии командам tput bel и cl присваиваются более значимые имена.
$ cat tput1
#!/bin/sh
BELL=`tput bel`
CLEAR=`tput cl`
echo $BELL
echo $CLEAR
В следующем сценарии изменяются несколько видеоатрибутов и происходит отображение и сокрытие курсора:
$ cat tput2
#!/bin/sh
BOLD=`tput bold`
REV=`tput rev`
NORMAL=`tput sgr0`
CURSOR_OFF=`'tput civis`
CURSOR_ON=`tput cnorm` tput init
# сокрытие курсора, выделение текста, перестановка текста, отображение курсора
echo $CURSOR_OFF
echo "${BQLD} WELCOME TO THE PIZZA PLACE ${NORMAL}"
echo -e "\n${REV} WE ARE OPEN 7 DAYS A WEEK ${NORMAL}"
echo $CURSOR_ON
Определение атрибутов терминала
$ ~ vim termput
1 #!/bin/bash
2 #termput
3 #инициируйте tput для терминала
4 tput init
5 clear
6 echo "tput <--> terminfo"
7 infocmp -1 $TERM | while read LINE
8 do
9 case $LINE in
10 bel*) echo "$LINE: звуковой сигнал";;
11 blink*) echo "$LINE: режим мерцания";;
12 bold*) echo "$LINE: двойная интенсивность";;
13 smso*) echo "$LINE: режим отступа";;
14 civis*) echo "$LINE: скрыть курсор";;
15 cnorm*) echo "$LINE: отобразить курсор";;
16 sgr0*) echo "$LINE: обычный экран";;
17 rev*) echo "$LINE: обратное видео";;
18 sc*) echo "$LINE: сохранение положения курсора";;
19 rc*) echo "$LINE: восстановление позиции курсора";;
20 esac
21 done
$ ~
tput <--> terminfo
bel=^G,: звуковой сигнал
blink=E[5m,: режим мерцания
bold=E[1m,: двойная интенсивность
civis=E[?25l,: скрыть курсор
cnorm=E[?12lE[?25h,: отобразить курсор
rc=E8,: восстановление позиции курсора
rev=E[7m,: обратное видео
sc=E7,: сохранение положения курсора
sgr0=E(BE[m,: обычный экран
smso=E[7m,: режим отступа
$ ~
Команда cat
Отображение символов управляющих клавиш
$ ~ cat -v
^[OP ^[OQ ^[OR ^[OS ^[[15~ ^[[17~ ^[[18~ ^[[19~ ^[[20~ ^[[21~ ^C
F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 Ctl+C
$ ~
...что позволит применять рассмотренные символы в сценариях в качестве дополнительных методов, обеспечивающих интерактивный режим работы
STTY
Команда stty (set teletypewriter,set tty), сегодня в отличии от зари UNIX ассоциируется с настройками терминала (по сути интерфейс драйвера).
https://webhamster.ru/site/page/index/articles/comp/8
https://www.opennet.ru/man.shtml?topic=stty&category=1
https://www.ibm.com/support/knowledgecenter/en/STTY.htm <<----------------
Собель М "Linux. Администрирование и системное программирование" <<----PDF (ст.840)
Синтаксис: stty [-a] [установки] [< терминал]
Описание:
Команда stty устанавливает определенные характеристики терминального ввода/вывода для устройства, являющегося стандартным вводом, используется если необходимо переопределить настройки (например клавиш), будучи запущена без аргументов печатает скорость передачи информации, порядок передачи информации, и отличия от обычных установок. Важным достоинством применения stty это управление аппаратным подтверждением связи на устройстве (параметр crtscts, включает аппаратное подтверждение связи на устройстве).
Опции:
-a - Все характеристики линии, напечатать все текущие установки в форме, понятной человеку
-g - Напечатать все текущие установки в форме, понятной stty
sane - Установка значений терминальной линии по умолчанию
intr - Послать сигнал прерывания текущего процесса
quit - Послать сигнал выхода
erase - Удалить последний введенный символ
kill - Удалить текущую строку
eof - Послать конец файла (завершить ввод)
eol - Конец строки
eol2 - Альтернативный символ конца строки (Не-POSIX)
swtch - Переключиться на другой уровень оболочки (Не-POSIX)
start - Запустить вывод далее, если он был приостановлен
stop - Приостановить вывод
susp - Послать сигнал остановки терминала
dsusp - Послать сигнал остановки терминала после сброса ввода (Не-POSIX)
rprnt - Перерисовать текущую строку (Не-POSIX)
werase - Удалить последнее введенное слово (Не-POSIX)
lnext - Протолкнуть в ввод следующий символ, даже если это специальный символ
Далее чтобы узнать, к каким комбинациям клавиш привязаны действия ввести команду:
$ stty -a
speed 38400 baud; rows 42; columns 106; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?; swtch = <undef>;
start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc ixany imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc
Далее можно тренироваться в переназначении клавиш......:) Весьма полезен ключ -g команды stty:
Этот параметр позволяет сохранить результаты выполнения команды stty в удобочитаемом формате, понятном stty. Затем эти результаты можно назначить команде stty (файл /etc/profile). Для этого достаточно разместить содержимое команды stty -g в соответствующей переменной, ввести необходимые изменения в команду stty, а по завершении передать эти изменения команде stty.
Этим приемом удобно воспользоваться, если при изменении параметров команды stty вы нечаянно нарушили нормальную работу терминала. В этом случае можно легко восстановить исходные параметры терминала. Ниже приведен пример сохранения и последующего восстановления текущих установок команды stty.
В данном случае команда stty -echo применяется для отключения режима отображения, а в конце сценария восстанавливаются исходные параметры. Введение пароля в ниже приведенном скрипте выполняет "декоративную" функцию ....:
#!/bin/bash
#sttypass
#
SAVEDSTTY=`stty -g` # save configuration
stty -echo # do not display password
echo -e "\nGive me that password :\c"
read PASSWD # get the password
echo -e "\nyour password is $PASSWD" #если не надо закоментировать или оставить: echo -e "\n"
stty $SAVEDSTTY # restore configuration
$ sttypass
Give me that password :
your password is .............
*** В Linux …
Чтобы сообщить Linux, что в строках предполагается применение управляющих символов, команду echo следует вводить как "echo -e .....".
Команда stty позволяет настраивать терминал, принтеры или модемы, т. е. она весьма универсальна. Однако стоит быть внимательным! Не следует изменять настройку ранее установленного параметра, поскольку это может привести к нарушению работоспособности системы.
Для сброса параметров до "разумных" значении есть команда stty sane, ввод команды stty sane устанавливает разумную конфигурацию, но она может немного отличаться от вашей обычной конфигурации.