Перенаправление входа и выхода
Теперь, предположим, что мы хотим послать результат
сортировки в файл, чтобы где-то сохранить список планируемых
покупок. Shell дает нам возможность перенаправлять стандартный
выход в файл, используя символ ``>''. Вот как это работает.
/home/larry/papers# sort > shopping-list
bananas
carrots
apples
[ctrl-D]
/home/larry/papers#
Как вы можете видеть, результат работы команды sort не
отображается на экране, вместо этого он сохраняется в файле
shopping-list (список покупок). Давайте посмотрим на этот файл.
/home/larry/papers# cat shopping-list
apples
bananas
carrots
/home/larry/papers#
Теперь мы можем не только сортировать (упорядочивать) список
планируемых покупок, но и сохранять его! Но предположим,
что мы хранили наш неотсортированный исходный закупочный список в
файле под именем items. Один из способов сортировки и сохранения
его, это отсортировать файл с данным именем, вместо получения
файла со стандартного входа, и перенаправить стандартный выход в
файл. Например так
/home/larry/papers# sort items > shopping-list
/home/larry/papers# cat shopping-list
apples
bananas
carrots
/home/larry/papers#
Но это можно сделать и по-другому. Перенаправлен может быть
не только стандартный выход, но также и стандартный вход,
используя символ ``<''.
/home/larry/papers# sort < items
apples
bananas
carrots
/home/larry/papers#
Технически, sort < items эквивалентно sort items, но
последний вариант позволяет нам продемонстрировать сказанное:
sort < items ведет себя так, словно данные файла items были
напечатаны на клавиатуре. shell обслуживает перенаправление. sort
не было дано имя файла (items) и команда читала со стандартного
входа, как будто шел ввод с клавиатуры.
Это иллюстрирует концепцию фильтра. Фильтр, это программа,
которая получает данные со стандартного входа, обрабатывает их
каким-то образом и посылает результат обработки на стандартный
выход. С помощью перенаправления стандартные вход и выход могут
быть переведены на файлы. sort - простейший фильтр: она сортирует
входные данные и посылает результат на стандартный выход. cat -
даже еще проще: она ничего не делает со входными данными, а
только выдает все, что не поступит, на выход.