Лучше применять эту команду в форме функции, тогда можно указывать значения для строки и столбца.
xу()
(
#_R= row, _C=column
_R=$1
_C=$2
tput cup $_R $_C
}
clear
xy 1 5
echo -n "Enter your name :"
read NAME
xy 2 5
echo -n "Enter your age :"
read AGE
Конечно, желательно передавать строку для отображения; ниже приводится небольшая модификация этого сценария.
ху()
{
#_R= row, _C=column
_R-$1
_TEXT=$3
tput cup $_R $_C
echo -n $_TEXT
}
Сценарий можно вызвать следующим образом:
xy 5 10 "Enter your password :" read CODE
21.2.6. Центрирование отображаемого текста
При центрировании текста на экране нужно быть предельно внимательным. С помощью команды tput необходимо получить столбцы, затем получить значение для длины строки, исключить это значение из столбцов tput и разделить ответ на две части. В дальнейшем нужно только указать номер строки, где отобразится данная строка.
Ниже приводится часть кода, который выполняет эту задачу. Чтобы просмотреть строки файла и центрировать на экране весь текст, достаточно выполнить небольшое изменение.
Введите символы, нажмите клавишу [Return], и текст отобразится в середине экрана начиная со строки 10.
echo -n "input string :"
read STR
# быстрый способ вычисления длины строки
LEN=`echo $STR | wc -с`
COLS=`tput cols`
NEW_COL=`expr \($COLS - $LEN \) / 2`
xy 10 $NEW_COL
echo $STR
Чтобы указанная функция отличалась большей гибкостью, при ее вызове можно
использовать текст и номер строки. Функция будет иметь следующий вид:
centertxt() {
_ROW=$1 _STR=$2
# быстрый способ получения длины строки
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
21.2.7. Определение атрибутов терминала
Рассмотрим сценарий, в котором с помощью команды 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
21.2.8. Применение функциональных клавиш при работе со сценариями
С помощью команды cat можно обращаться к специальным клавишам ([F1], [стрелка_вверх] и т. д.). Введите команду cat -v, затем нажмите любую управляющую клавишу и просмотрите, что отобразится в нижней строке. Когда просмотр завершится, нажмите комбинацию клавиш [Ctrl+C].
В следующем примере вызывается команда cat и используются клавиши [F1] (^[OP), [F2](^[OQ) и [стрелка_вверх](^[[A).
$ cat -v
^[ОР
^[OQ
^[[А
<CTRL‑C>
Эта информация позволяет применять рассмотренные символы в сценариях в качестве дополнительных методов, обеспечивающих интерактивный режим работу пользователя.
В приведенном ниже сценарии распознаются клавиши [F1], [F2], а также клавиши стрелок. Пользовательские значения могут быть иными, поэтому выполните команду cat, чтобы уточнить, какие значения соответствуют управляющим клавишам терминала.
$ pg control_keys