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