# быстрый способ получения длины строки
LEN=`echo $_STR | wc -c`
COLS=`tput cols`
_NEW_COL=`expr \{$COLS - $LEN \) / 2`
xy $_ROW $_NEW_COL
echo $_STR
}
Чтобы вызвать функцию, следует применить команду:
centertxt 15 "THE MAIN EVENT"
или аналогичную команду, но с использованием строки в качестве аргумента:
centertxt 15 $1
Рассмотрим сценарий, в котором с помощью команды tput производится обращение к базе данных terminfo. С помощью некоторых команд tput отображаются управляющие коды терминала.
$ pg termput
#!/bin/sh
#termput
#инициируйте tput для терминала
tput init
clear
echo "tput <> terminfo"
infocmp -l $TERM | while read LINE
do
case $LINE in
bel*) echo "$LINE: sound the bell" ;;
blink*) echo "$LINE: begin blinking mode";;
bold*) echo "$LINE: make it bold" ;;
el*) echo "$LINE: clear to end of line" ;;
civis*) echo "$LINE: turn cursor off";;
cnorm*) echo "$LINE: turn cursor on ";;
clear*) echo "$LINE: clear the screen" ;;
kcuul*) echo "$LINE: up arrow ";;
kcubl*) echo "$LINE: left arrow ";;
kcufl*) echo "$LINE: right arrow ";;
kcudl*) echo "$LINE: down arrow ";;
esac done
Команда infocmp извлекает из файла базы данных terminfo информацию о терминале. Если нужно просмотреть файл, содержащий сведения о настройках терминала, выполните команду:
$ infocmp $TERM
Ниже с помощью сценария termput отображается поток вывода для некоторого терминала:
$ termput
tput <> terminfo
bel=^G,: sound the bell
blink=E[5m, : begin blinking mode
bold=E[1m,: make it bold
civis=E[?251,: turn cursor off
clear=E[HE[J,: clear the screen cnorm
‑E[?25h,; turn cursor on
el=E[K,: clear to end of line
ell=E[lK,: clear to end of line
kcubl=E[D,: left arrow
kcudl=E[B,: down arrow
kcufl=E[C,: right arrow
kcuul=E[A,: up arrow
С помощью команды cat можно обращаться к специальным клавишам ([F1], [стрелка_вверх] и т. д.). Введите команду cat -v, затем нажмите любую управляющую клавишу и просмотрите, что отобразится в нижней строке. Когда просмотр завершится, нажмите комбинацию клавиш [Ctrl+C].
В следующем примере вызывается команда cat и используются клавиши [F1] (^[OP), [F2](^[OQ) и [стрелка_вверх](^[[A).
$ cat -v
^[ОР
^[OQ
^[[А
Эта информация позволяет применять рассмотренные символы в сценариях в качестве дополнительных методов, обеспечивающих интерактивный режим работу пользователя.
В приведенном ниже сценарии распознаются клавиши [F1], [F2], а также клавиши стрелок. Пользовательские значения могут быть иными, поэтому выполните команду cat, чтобы уточнить, какие значения соответствуют управляющим клавишам терминала.
$ pg control_keys
#!/bin/sh
#управляющие_клавиши
#для вставки примените последовательность '
uparrowkey='^[[А'
downarrowkey='^[[В'
leftarrowkey='^[[D'
rightarrowkey='^[[С'
f1key='^[OP'
f2key='^[OQ'
echo -n " Press a control key then hit return"
read KEY
case $KEY in
$uparrowkey) echo "UP arrow";;
$downarrowkey) echo "DOWN arrow";;
$leftarrowkey) echo "LEFT arrow";;
$rightarrowkey) echo "RIGHT arrow";;
$f1key) echo "F1 key";;
$f2key) echo "F2 key";;
*) echo "unknown key $key";;
esac