При нажатии клавиши RETURN хранимые символы пересылаются в программу, читающую сейчас символы с терминала. Считывающая программа в свою очередь может интерпретировать символы особым образом: например, интерпретатор shell исключает любую специальную интерпретацию символа, если ему предшествует обратная дробная черта. Мы вернемся к этому вопросу в гл. 3. Пока же следует помнить о том, что ядро системы реагирует лишь на символы уничтожения и стирания и на обратную дробную черту, если она предшествует одному из них. Любые символы, которые остаются после такой обработки, могут интерпретироваться другими программами.
Объясните, что произойдет в случае ввода команды
$ date\@
Большинство интерпретаторов shell (кроме версии 7) интерпретирует символ # как начало примечания и игнорирует весь текст от символа # до конца строки. Учитывая это, объясните приведенный ниже диалог. Предполагается, что для стирания также используется символ #:
$ date
Mon Sep 26 12:39:56 EDT 1983
$ # date
Mon Sep 26 12:40:21 EDT 1983
$\#date
$\\#date
#date : not found
$
Ядро системы воспринимает ваш ввод по мере того, как вы набираете текст, даже если оно занято чем-то другим, так что можно вводить данные сколь угодно быстро, даже в тот момент, когда какая-либо программа выполняет вывод на терминал. Вводимые в это время символы будут "перемежаться" на экране с выводимыми, но будут сохраняться и интерпретироваться в должном порядке. Вы можете вводить команды одну за другой, не дожидаясь не только конца, но и начала их выполнения.
Выполнение большинства команд можно остановить, нажав клавишу DELETE (УДАЛИТЬ). Чаще всего так же действует и клавиша BREAK (ПРЕРВАТЬ), которая имеется почти на всех терминалах. При работе некоторых программ, таких, как текстовые редакторы, DELETE прекращает выполнение программы, но без выхода из нее. При выключении терминала или отключении от сети выполнение многих программ завершается.
Если вы хотите приостановить вывод на терминал, например, для того, чтобы важная информация не исчезла с экрана, введите ctl-s. Вывод прекратится практически немедленно: выполнение программы приостановится до тех пор, пока вы не возобновите его, для чего достаточно ввести ctl-q.
Для правильного выхода из системы нужно вместо очередной команды ввести ctl-d. Shell воспримет это как сообщение о конце ввода. (Что произойдет на самом деле, будет объяснено в следующей главе.) Обычно вы можете просто выключить терминал или отключить его от сети, но произойдет ли при этом фактический выход из системы, зависит от самой системы.
Система предоставляет почтовые услуги для обмена сообщениями с другими пользователями, так что, войдя однажды в систему, вы увидите на экране до появления приглашения сообщение:
You have mail
Для чтения почты введите:
$ mail
Сообщения будут выведены одно за другим, начиная с самых последних. После каждого сообщения программа mail ожидает вашего указания, что делать с сообщением. Возможны два основных ответа: ввод символа 'd', означающего удаление сообщения, и ввод RETURN, оставляющего его (т.е. оно вновь появится при следующем просмотре почты). Другими ответами могут быть 'p', что означает распечатку сообщения, 's filename' — сохранение сообщения в поименованном файле и 'q' — выход из программы mail. (Если вы не знаете, что такое файл, то представьте его себе как место, где можно хранить информацию под выбранным вами именем, а затем получать ее оттуда. Файлы рассматриваются в разд. 1.2, как, впрочем, и в большей части этой книги.)
mail — именно та программа, которая, вероятно, будет отличаться от описываемой здесь, поскольку существует много вариантов такой программы. Более детально вы можете познакомиться с ней по своему справочному руководству.
Послать почту кому-нибудь весьма просто. Допустим, она предназначена для пользователя с входным именем nico. Легче всего это сделать так:
$ mail nico
Теперь вводите любой текст письма
из любого числа строк...
После последней строки письма введите ctl-d
ctl-d
$
Ввод ctl-d означает, что письмо окончено. Если в процессе составления письма вы передумаете и решите его не отправлять, нажмите клавишу DELETE вместо ctl-d. Незаконченное письмо будет сохранено в файле dead.letter.
Для проверки пошлите письмо самому себе, а затем введите mail, чтобы прочитать его. (Это не так странно, как может показаться, и представляется удобным механизмом напоминания.) Существуют и иные способы посылки почты: можно послать заранее подготовленное письмо, направить почту нескольким адресатам одновременно и даже переслать почту пользователям, работающим на других машинах (подробнее об этом см. в описании команды mail в разд. 1 справочного руководства по UNIX.) В дальнейшем мы будем применять обозначение mail(1) для страницы, описывающей команду mail в разд. 1 справочного руководства.
Имеется также служебная программа calendar для печати календаря (см. calendar(1)); в гл. 4 мы покажем, как создать такую программу, если она отсутствует.
Сообщение для других пользователей. Если ваша система UNIX многопользовательская, то как-нибудь однажды на вашем терминале может появиться сообщение типа
Message from mary tty 7...
сопровождаемое пугающим жужжанием. Пользователь Mary хочет что-то сообщить вам, но, если вы не совершите определенных действий, то не сможете ей ответить. Поэтому введите
$ write mary
чтобы установить двустороннюю связь. Теперь вы с Mary сможете обмениваться сообщениями, хотя эта линия связи очень медленная, словно ваш абонент находится на Луне.
У вас может появиться желание во время выполнения программы задать ту или иную команду для shell. Обычно, какая бы программа ни выполнялась, она должна быть приостановлена либо остановлена но некоторые программы, такие, как редактор или сама команда write, имеют специальную команду 'T' для временного выхода в интерпретатор shell (см. табл. 2 приложения 1).
Команда write не накладывает никаких ограничений, поэтому необходим протокол общения, чтобы ваш ввод не перемешивался с тем, что вводит Mary. Существует соглашение, согласно которому ввод следует осуществлять порциями, оканчивающимися символами (о), что означает конец ввода ("over"), а для сигнализации о прекращении связи использовать (oo) ("over" и "out" — конец и выход).
Терминал mary Ваш терминал
$ write you $ Message from mary tty7...
write mary