Клавише [Esc] соответствует код \033. Символ \ указывает команде echo, что далее следует восьмеричное значение. Например, для вывода на экран символа @ можно применить команду:
echo "@"
Или же для вывода на экран этого символа можно воспользоваться восьмеричным значением символа, которое равно 100.
echo -e "\100"
Для System V примените команду:
echo "\100"
Результат будет аналогичным.
Команда clear очищает экран и устанавливает курсор в верхнем левом углу экрана. Это положение курсора обычно называется home. При работе с терминалами, относящимися к семейству VT, эту процедуру выполняет последовательность esc [2J. Данную последовательность можно отправить с помощью конструкции echo.
System V echo "\033[2J"
LINUX/BSD echo -e "\033[2J"
При этом следует придерживаться тех же правил, которыми руководствуются при работе с управляющими символами, помещенными в текстовые файлы. Не следует применять методику "вырезать и вставить", поскольку в этом случае будет утеряно специальное значение символов. Чтобы вставить управляющие символы, отображающие курсор, воспользуйтесь следующим кодом:
echo '
Здесь даны указания о том, что следует воспользоваться комбинацией клавиш [Ctrl+V], затем нажать клавишу [Esc] и после этого ввести символы [?25h.
Если при использовании команды tput civis курсор не исчезает и при этом не запущен эмулятор, воспользуйтесь следующим небольшим сценарием. С его помощью можно скрыть либо отобразить курсор. Вы можете подробно изучить приведенную
функцию либо перевернуть пару страниц и сразу ознакомиться с результатами выполнения сценария.
$ pg cursor
#!/bin/sh
#отображение|сокрытие курсора
#отображает или скрывает курсор при работе с терминалами vt100, 200, 220, meth220
#замечание: функционирует при нормальном ttу–соединении при использовании
#некоторых win–эмуляций
#проверьте TERM env для вашего типа!
_ОРТ=$1
if [ $# -ne 1 ]; then
echo "Usage: `basename $0` cursor [on | off]"
exit 1
fi
case "$_OPT" in
on|ON|On)
# отображение курсора
ON=`echo ^[[?25h`
echo $ON
;;
off|OFF|Off)
# сокрытие курсора
OFF=`'echo ^[ [?251`
echo $OFF
;;
*)echo "Usage: cursor on | off" exit 1
;;
esac
Команду tput также можно применять для отображения курсора в произвольном месте экрана. При этом используется следующий формат:
cup r c
где r — это номер ряда (строки) в нижней части экрана, а с — номер столбца на экране.
Лучше применять эту команду в форме функции, тогда можно указывать значения для строки и столбца.
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
При центрировании текста на экране нужно быть предельно внимательным. С помощью команды 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