Интерпретатор командного языка shell

Ввод-вывод


Три направления ввода-вывода являются выделенными - стандартный ввод, стандартный вывод и стандартный протокол. Как правило, команды берут исходные данные из стандартного ввода и помещают результаты в стандартный вывод.

Стандартные ввод, вывод и протокол можно переназначить.

Обозначение

< <имя файла>

служит для переназначения стандартного ввода (дескриптор файла 0),

> <имя файла>

для стандартного вывода (дескриптор файла 1);

<< <строка>

ввод происходит со стандартного ввода, пока не встретится указанная <строка> или конец файла,

>> <имя файла>

для стандартного вывода; если файл существует, то выводимая информация добавляется к конец этого файла,

<& <цифра>

в качестве стандартного ввода об(r)является файл, ассоциированный



с дескриптором <цифра>; аналогично для стандартного вывода

>& <цифра>

<&- и >&-

закрывают соответственно стандартный ввод и вывод.

Если любой из этих конструкций предшествует цифра, то с указанным файлом будет ассоциирован дескриптор, равный указанной цифре, вместо 0 и 1 по умолчанию. Например,

2 > <имя файла>

для стандартного протокола используется дескриптор 2, а

2 >& 1

ассоциирует дескриптор 2 с файлом, ассоциированным с дескриптором 1.

... 2>protocol

переназначает стандартный протокол (дескриптор 2) в файл по

имени protocol.

Чтобы переназначить стандартный протокол туда же, куда уже назначен стандартный вывод, следует употребить конструкцию

... 2>&1

Важен порядок переназначения: shell производит переназначение слева направо по указанному списку. Так,

1 > xxx 2 >& 1

сначала ассоциирует дескриптор 1 с файлом xxx, а затем дескриптор 2 с 1, т.е. тоже с xxx. А

2 >& 1 1 > xxx

ассоциирует дескриптор 2 с терминалом, а 1 - с файлом xxx.

Можно переназначить системный ввод на текущий файл:

isql - - <



Содержание раздела