[ Содержание ]
Предположим, что нам необходимо выполнить две программы: prog1 и prog2. Причем, то что prog1 выводит на стандартный вывод необходимо передать на стандартный ввод prog2. Для этого можно выполнить следующие команды:
$ prog1 > tmp $ prog2 < tmp $ rm tmp $
То есть сначала сохраняем во временном файле стандартный вывод программы prog1. А при запуске prog2 перенаправляем содержимое файла на её стандартный ввод. Затем удаляем временный файл.
Для передачи данных со стандартного вывода одной программы на стандартный ввод другой программы в Linux предусмотрен механизм называемый конвейером команд. Для создания такого конвейера используется символ |.
prog1 | prog2
Рассмотрим простой пример.
$ ls -l | sort > sorted $
Результат работы программы ls (список файлов) передаётся по конвейеру на стандартный вход программы sort. При этом список файлов не попадает на экран терминала. Программа sort сортирует файл по строкам. Поскольку у sort перенаправлен стандартный вывод, информация на экран не попадает, а передаётся в файл sorted. То есть в результате выполнения этого конвейера команд, в файле sorted сохраняется отсортированный список файлов.
Длина конвейера команд ограничена только размером командной строки. То есть можно добавить к конвейеру третью, четвертую, пятую и т.д. программы.
На примере конвейеров команд хорошо виден так называемый путь UNIX (UNIX way). В UNIX редко встречаются универсальные программы, которые умеют делать все. Существует большое количество небольших программ. Каждая программа хорошо делает определённое действие: хорошо сортирует файлы, хорошо фильтрует данные и т.д. Все программы умеют работать со стандартными вводом и выводами. Объединяя эти программы в конвейер команд, в результате мы получаем обработку данных без написания новой программы. Таким образом, по разному комбинируя программы в конвейере, можно получить различные результаты.
[ Содержание ]