Команды управления терминалом

$ echo $LS_COLORS

$ for COLOR in {1..255}; do echo -en "\e[38;5;${COLOR}m${COLOR} "; done; echo;

Если совсем нечего делать:

$ 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)

А вот еще вариант:

for C in {0..255}; do

tput setab $C

echo -n "$C "

done

tput sgr0

echo

$ ~ 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 устанавливает разумную конфигурацию, но она может немного отличаться от вашей обычной конфигурации.