Перенаправление ввода-вывода


Перенаправление ввода-вывода — возможность командной оболочки ряда операционных систем перенаправлять стандартные потоки в определённое пользователем место, например, в файл. Характерна для Unix-подобных операционных систем, но в разной степени реализована и в операционных системах других семейств.

Перенаправление обычно осуществляется вставкой специального символа > между командами.
Обычно синтаксис выглядит так: команда1 > файл1 — выполняет команду1, помещая стандартный вывод в файл1; команда1 < файл1 выполняет команду1, используя в качестве источника ввода файл1 (вместо клавиатуры).
На каждый запрос ввода программы считывается одна строка текста из файла. Конструкция команда1 < файл1 > файл2 совмещает два предыдущих варианта: выполняет команду1 ввода из файла1 и вывода в файл2.

Конвейеры — это возможность нескольких программ работать совместно, когда выход одной программы непосредственно идет на вход другой без использования промежуточных временных файлов. Синтаксис: команда1 | команда2, выполняет команду1 используя её поток вывода как поток ввода при выполнении команды2, что равносильно использованию двух перенаправлений и временного файла:

Хороший пример командных конвейеров — это объединение echo с другой командой для получения интерактивности в неинтерактивных средах, к примеру:

Здесь запускается ftp-клиент, который подключается к локальному узлу (localhost). На запрос программы водит первую строку ИмяПользователя, затем на следующий запрос ввода считывает строку Пароль. Строки в команде echo разделены через \n.

В командной оболочке Unix, произошедшей из Bourne shell, предыдущие два действия можно усовершенствовать, указав номер (файловый дескриптор) непосредственно перед символом перенаправления. Этот номер указывает, какой именно поток используется для перенаправления. В Unix существуют следующие стандартные потоки ввода-вывода: