Связывание процессов с помощью каналов (конвейеров)

Часто возникает необходимость использовать вывод одной программы в качестве ввода другой. Вместо того, чтобы вводить каждую команду по отдельности и сохранять результаты в промежуточных файлах, свяжите последовательные команды с помощью канала (|). Название канал (конвейер) весьма точно отражает суть происходящего. Информация, выдаваемая программой слева от канала (вертикальной черты), передается через канал и поступает на вход программы справа. С помощью каналов можно связывать несколько процессов при этом следует учесть, что все программы запускаются одновременно. Если же для разделения команд между собой в одной строке вы используете как точку с запятой, так и символ конвейера, то перед каждой точкой с запятой shell будет останавливаться и ожидать, пока не выполнятся все предыдущие команды – как отдельные, так и объединённые в конвейер.

В качестве примера, рассмотрим часто используемый на практике приём постраничного вывода большого объёма текстовой информации на экран монитора:

#ps -uax | more

Вторая команда more – это программа, при помощи которой длинные файлы показываются постранично, а не целиком (формат команды more [-флаги] [файл1..]). Чтобы показать следующую страницу, следует нажать клавишу пробела, а для выхода – q.

При использовании конвейеров, бывает чрезвычайно полезна команда tee [-a] [файл], которая копирует стандартный ввод на стандартный вывод или, дополнительно, – в указанный файл. Если он уже существует, то его содержимое замещается, а при указании опции –a происходит дописывание в конец файла. Фактически, она позволяет снимать промежуточные результаты при «длинных» конвейерах и выводить их либо на терминал, либо в указанный файл (файлы).

Воспользовавшись только лишь рассмотренными командами можно уже, запрограммировать достаточно сложную последовательность действий, которую на практике, иногда, приходится многократно повторять. Так, например, следующие две команды формируют файл, состоящий из отсортированного файла sales.dat, трёх чисел задающих соответственно – число строк, слов и байтов отсортированного файла sales.dat, и в последней строке указана дата создания этого файла:

#sort sales.dat | tee sales.srt | wc >> sales.srt

date >> sales.srt

Используемая здесь команда wc имеет своим входом текстовую информацию, а выходом – три описанных выше числа.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: