Ввод-вывод
Три направления ввода-вывода являются выделенными - стандартный ввод, стандартный вывод и стандартный протокол. Как правило, команды берут исходные данные из стандартного ввода и помещают результаты в стандартный вывод.
Стандартные ввод, вывод и протокол можно переназначить.
Обозначение
< <имя файла>
служит для переназначения стандартного ввода (дескриптор файла 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 - - <