Выбрать главу

Терминалы

tty

Выводит имя терминала текущего пользователя. Обратите внимание: каждое отдельное окно xterm считается отдельным терминалом.

bash$ tty

/dev/pts/1

stty

Выводит и/или изменяет настройки терминала. Эта сложная команда используется в сценариях для управления поведением терминала.

Пример 13-1. Установка символа "забоя"

#!/bin/bash

# erase.sh: Использование команды "stty" для смены клавиши "забоя" при чтении ввода.

echo -n "Как Вас зовут? "

read name # Попробуйте стереть последние символы при вводе.

# Все работает.

echo "Вас зовут $name."

stty erase '#' # Теперь, чтобы стереть символ нужно использовать клавишу "#".

echo -n "Как Вас зовут? "

read name # Попробуйте стереть последние символы при вводе с помощью "#".

echo "Вас зовут $name."

exit 0

Пример 13-2. невидимый пароль: Отключение эхо-вывода на терминал

#!/bin/bash

echo

echo -n "Введите пароль "

read passwd

echo "Вы ввели пароль: $passwd"

echo -n "Если кто-нибудь в это время заглядывал Вам через плечо, "

echo "то теперь он знает Ваш пароль."

echo && echo # Две пустых строки через "and list".

stty -echo # Отключить эхо-вывод.

echo -n "Введите пароль еще раз "

read passwd

echo

echo "Вы ввели пароль: $passwd"

echo

stty echo # Восстановить эхо-вывод.

exit 0

Перехват нажатия на клавиши с помощью stty.

Пример 13-3.

#!/bin/bash

# keypress.sh: Определение нажатых клавиш.

echo

old_tty_settings=$(stty -g) # Сохранить прежние настройки.

stty -icanon

Keypress=$(head -c1) # или $(dd bs=1 count=1 2> /dev/null)

# для других, не GNU, систем

echo

echo "Была нажата клавиша \""$Keypress"\"."

echo

stty "$old_tty_settings" # Восстановить прежние настройки.

# Спасибо, Stephane Chazelas.

exit 0

См. также Пример 9-3.

терминалы и их режимы работы

Как правило, терминалы работают в каноническом режиме. Когда пользователь нажимает какую-либо клавишу, то соответствующий ей символ не сразу передается программе, исполняемой в окне терминала. Этот символ поступает сначала в локальный буфер терминала. Когда пользователь нажимает клавишу ENTER, то тогда все содержимое буфера передается программе.

bash$ stty -a

speed 9600 baud; rows 36; columns 96; line = 0;

intr = ^C; quit = ^\; erase = ^H; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>;

start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O;

...

isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt

В каноническом режиме можно использовать символы редактирования во время ввода.

bash$ cat > filexxx

wha<ctl-W>I<ctl-H>foo bar<ctl-U>hello world<ENTER>

<ctl-D>

bash$ cat filexxx

hello world

bash$ bash$ wc -c < file

13

Процесс в терминале получит только 13 символов (12 алфавитных символов и символ перевода строки), хотя пользователь нажал 26 клавиш.

В неканоническом ("сыром") режиме, каждая нажатая клавиша (включая специальные символы редактирования, такие как ctl-H) сразу же передается исполняющемуся в терминале процессу.

Под управлением Bash, базовый терминальный редактор заменяется более сложным терминальным редактором Bash. Например, если вы нажмете комбинацию клавиш ctl-A в командной строке Bash, то вы не увидите символов ^A, которые выводит терминал, вместо этого Bash получит символ \1, проанализирует его и переместит курсор в начало строки.

Stephane Chazelas

tset

Выводит или изменяет настройки терминала. Это более слабая версия stty.

bash$ tset -r

Terminal type is xterm-xfree86.

Kill is control-U (^U).

Interrupt is control-C (^C).

setserial

Настройка параметров последовательного порта. Эта команда должна запускаться пользователем, обладающим привилегиями root. Эту команду можно встретить в сценариях настройки системы.

# Взято из /etc/pcmcia/serial :

IRQ=`setserial /dev/$DEVICE | sed -e 's/.*IRQ: //'`

setserial /dev/$DEVICE irq 0 ; setserial /dev/$DEVICE irq $IRQ

getty, agetty

Программа getty или agetty запускается процессом init и обслуживает процедуру входа пользователя в систему. Эти команды не используются в сценариях.

mesg

Разрешает или запрещает доступ к терминалу текущего пользователя командой write.

Наверное это очень неприятно, когда, во время работы над текстовым файлом, в окне терминала, прямо среди текста, вдруг появляется предложение заказать пиццу. Поэтому, при работе в многопользовательской системе, вам наверняка захочется отключить доступ к своему терминалу.