Конвейеры и фильтры

Конвейер (pipe) позволяет направить поток вывода одного процесса на поток ввода другого процесса. Для организации конвейера необходимо поставить символ конвейера — вертикальную черту (|) между командами, потоки ко- торых необходимо объединить. Естественно, первой должна быть указана команда, поток вывода которой должен быть передан второй команде (при- мер 8.11).

 

Пример 8.11. Конвейер

 

$ last | view -

 

Выводимый командой last список входивших в сеанс пользователей передан через конвейер команде просмотра view (вызов vi на чтение, нажмите :q для выхода). Знак "дефис" после команды view сообщает, что текст должен быть получен из потока ввода, в который передает свой вывод команда last.

Конвейер может состоять из множества команд, причем команды в середине конвейера обязательно должны быть фильтрами. Фильтр — это команда,


 

способная принимать поток данных через стандартный поток ввода, обраба- тывать их и выводить обработанные данные в стандартный поток вывода.

Правила построения конвейера таковы:

1. Первая команда конвейера должна выводить информацию в поток вывода.

2. Команды, не находящиеся по краям конвейера, должны быть фильтрами.

3. Последняя команда в конвейере должна читать стандартный поток ввода.

Пример фильтра — команда tee. Она никак не меняет полученные из стан- дартного потока ввода данные, а лишь копирует их в стандартный поток вы- вода и в файлы, заданные ей в качестве аргументов (пример 8.12).

 

Пример 8.12. Команда tee

 

$ ps -o comm= -o pid= | tee ps.txt | sort
bash  
ps  
sort  
tee  
$ cat ps.txt  
ps  
tee  
sort  
bash  

 

В примере 8.12 команда ps выводит список процессов без заголовка в два столбца: команда и PID. Содержимое файла ps.txt содержит вывод команды ps, т. к. команда tee получила его из стандартного потока ввода. Эти же дан- ные tee передала через поток вывода далее команде sort для сортировки. На экран выводится сортированный список процессов, а в файле ps.txt — он не отсортированный.

Команду tee часто используют для отладки работы сложных конвейеров, состоящих из множества команд. Эту команду удобно устанавливать в месте конвейера, которое вызывает подозрения. Так как в файле, указанном в каче- стве аргумента tee, будет находиться та же информация, что была передана в данном месте конвейера, то по ней легко можно будет определить наличие и суть ошибок.

Большинство фильтров предназначено для обработки исключительно текста, но это вовсе не обязательно. Команда tee, например, может обрабатывать и бинарные данные. При этом стоит позаботиться лишь о том, чтобы бинарные


 

данные не были выведены на экран, например, перенаправив поток вывода в /dev/null.

 








Дата добавления: 2015-06-12; просмотров: 1031;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.008 сек.