UNIX — универсальная среда программирования | страница 32
>команда флаги возможные имена файлов
Если имена файлов не указаны, то команда читает стандартный входной поток, который по умолчанию поступает с терминала (что удобно для экспериментирования), однако возможно его переключение на файл или программный канал. Кроме того, во многих командах выдача идет в стандартный выходной поток, который по умолчанию направлен на терминал, но его также можно переключить на файл или программный канал.
Сообщения же об ошибках, выдаваемые командами, следует обрабатывать по-другому, иначе они затеряются в файле или программном канале. Поэтому каждая команда имеет еще один стандартный файл, называемый файлом диагностики, который обычно связан с вашим терминалом:
Рис. 1.2: Схема потоков в UNIX
Почти все рассматривавшиеся выше команды укладываются в эту схему; исключение составляют >who и >date, не имеющие входной информации, а также те, например >cmp или >diff, которые имеют определенное число входных файлов. (Посмотрите их флаг >'-'.)
Объясните разницу между командами
>$ who | sort
и
>$ who > sort
Интерпретатор >shell выполняет и некоторые другие операции, помимо связывания через программный канал. Рассмотрим кратко вопрос одновременного выполнения нескольких программ, о чем уже упоминалось при обсуждении программных каналов. Например, можно запустить две команды с помощью одной командной строки, разделив их точкой с запятой; интерпретатор >shell распознает этот символ и разобьет строку на две команды:
>$ date; who
>Tue Sep 27 01:03:17 EDT 1983
>ken tty0 Sep 27 00:43
>dmr tty1 Sep 26 23:45
>rob tty2 Sep 26 23:59
>bwk tty3 Sep 27 00:06
>jj tty4 Sep 26 23:31
>you tty5 Sep 26 23:04
>her tty7 Sep 26 23:34
Обе команды будут выполнены (подряд) прежде, чем интерпретатор вновь вернется с приглашением.
Можно также при желании запустить несколько команд одновременно. Предположим, что вы собираетесь заняться длительными вычислениями, например, подсчитать число слов в вашей книге, но не хотите ждать окончания команды >wc для перехода к другой работе. Тогда можно задать:
>$ wc ch* > wc.out &
>6944 Shell дает номер процесса
>$
Амперсанд (>&) в конце командной строки указывает интерпретатору, что нужно запустить данную команду, а затем сразу перейти к получению последующих команд с терминала, т.е. не ждать ее завершения. Итак, команда будет выполняться, а вы можете отвлечься на что-нибудь другое. Переключение выходного потока на файл >wc.out предотвращает возможность его смешивания с той информацией, которая появится на терминале в процессе дальнейшей работы.