5.5.2 Оператор |

5.5.2 Оператор |

Особым вариантом перенаправления вывода является организация программного канала (иногда называет трубопроводом или конвейером). Для этого две или несколько команд, таких, что вывод предыдущей служит вводом для следующей, соединяются (или разделяются, если вам это больше нравится) символом вертикальной черты - "|". При этом стандартный выходной поток команды, расположенной слева от символа |, направляется на стандартный ввод программы, расположенной справа от символа |. Например:

[user]$ cat myfile | grep Linux | wc -l

Эта строка означает, что вывод команды cat, т. е. текст из файла myfile, будет направлен на вход команды grep, которая выделит только строки, содержащие слово "Linux". Вывод команды grep будет, в свою очередь, направлен на вход команды wc -l, которая подсчитает число таких строк.

Программные каналы используются для того, чтобы скомбинировать несколько маленьких программ, каждая из которых выполняет только определенные преобразования над своим входным потоком, для создания обобщенной команды, результатом которой будет какое-то более сложное преобразование.

Надо отметить, что оболочка одновременно вызывает на выполнение все команды, включенные в конвейер, запуская для каждой из команд отдельный экземпляр оболочки, так что как только первая программа начинает что-либо выдавать в свой выходной поток, следующая команда начинает его обрабатывать. Точно так же каждая следующая команда выполняет свою операцию, ожидая данных от предыдущей команды и выдавая свои результаты на вход последующей. Если вы хотите, чтобы какая-то команда полностью завершилась до начала выполнения последующей, вы можете использовать в одной строке как символ конвейера |, так и точку с запятой;. Перед каждой точкой с запятой оболочка будет останавливаться и ожидать, пока завершится выполнение всех предыдущих команд, включенных в конвейер.

Статус выхода (логическое значение, возвращаемое после завершения работы программы) из канала совпадает со статусом выхода, возвращаемым последней командой конвейера. Перед первой командой конвейера можно поставить символ "!", тогда статус выхода из конвейера будет логическим отрицанием статуса выхода из последней команды. Оболочка ожидает завершения всех команд конвейера, прежде чем установить возвращаемое значение.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

1.4.7 Оператор while

Из книги C++ автора Хилл Мюррей

1.4.7 Оператор while Рассмотрим копирование строки, когда заданы указатель p на ее первый символ и указатель q на целевую строку. По соглашению строка оканчивается символом с целым значением 0.while (p != 0) (* *q = *p; // скопировать символ q = q+1; p = p+1; *) *q = 0; // завершающий символ 0 скопирован


1.4.8 Оператор for

Из книги Давайте создадим компилятор! автора Креншоу Джек

1.4.8 Оператор for Рассмотрим копирование десяти элементов одного вектора в другой:for (int i=0; i«10; i++) q[i]=p[i];Это эквивалентно int i = 0; while (i«10) (* q[i] = p[i]; i++; *) но более удобочитаемо, поскольку вся информация, управляющая циклом, локализована. При применении операции ++ к целой


9.6 Оператор For

Из книги Linux для пользователя автора Костромин Виктор Алексеевич

9.6 Оператор For Оператор for имеет видfor (оператор_1 выражение_1 opt; выражение_2 opt) оператор_2Этот оператор эквивалентен следующему:оператор_1 while ( выражение_1 ) (* оператор_2 выражение_2 ; *)за исключением того, что continue в операторе_2 будет выполнять выражение_2 перед выполнением


Оператор DO

Из книги Базы данных: конспект лекций автора Автор неизвестен


5.8.5 Оператор for

Из книги Программирование автора Козлова Ирина Сергеевна

5.8.5 Оператор for Оператор for работает немного не так, как в обычных языках программирования. Вместо того, чтобы организовывать увеличение или уменьшение на единицу значения некоторой переменной при каждом проходе цикла, он при каждом проходе цикла присваивает переменной


1. Оператор Select – базовый оператор языка структурированных запросов

Из книги Справочное руководство по C++ автора Страустрап Бьярн

1. Оператор Select – базовый оператор языка структурированных запросов Центральное место в языке структурированных запросов SQL занимает оператор Select, с помощью которого реализуется самая востребованная операция при работе с базами данных – запросы.Оператор Select


R.6.4.1 Оператор if

Из книги Язык Си - руководство для начинающих автора Прата Стивен

R.6.4.1 Оператор if Выражение должно быть арифметического типа, или типа указателя, или типа класс, для которого существует однозначное преобразование в арифметический тип или тип указателя (§R.12.3).Вычисляется выражение, и если оно имеет отличный от нуля результат,


R.6.5.2 Оператор do

Из книги Linux и UNIX: программирование в shell. Руководство разработчика. автора Тейнсли Дэвид

R.6.5.2 Оператор do В операторе do вложенный оператор выполняется до тех пор, пока значение выражения не станет равным нулю. Проверка происходит после каждого выполнения оператора.Выражение должно быть арифметического типа, или типа указателя, или типа класс, для которого


R.6.5.3 Оператор for

Из книги C++ для начинающих автора Липпман Стенли

R.6.5.3 Оператор for Оператор for for ( оператор-иниц выражение-1 opt ; выражение-2 opt ) операторэквивалентен конструкцииоператор-иницwhile ( выражение-1 ) { оператор выражение-2 ;}за исключением того факта, что оператор continue в операторе for вызовет выполнение выражение-2 перед тем, как


Оператор if/else

Из книги автора

Оператор if/else В отличие от C и C++, оператор if/else в C# может работать только с булевыми выражениями, а не с произвольными значениями -1, 0. Поэтому в операторах if/else обычно используются операции C#, показанные в табл. 3.6. чтобы получить буквальные булевы значения.Таблица 3.6.


Оператор do while

Из книги автора

Оператор do while Ключевые слова: do, whileОбщие замечания: Оператор do while создает цикл, который повторяется до тех пор, пока выражение, проверяющее условие, не станет ложным, или нулем. Оператор do while является циклом с постусловием; после прохождения цикла принимается решение,


3.3. Оператор &

Из книги автора

3.3. Оператор & При выполнении задания в экранном режиме происходит "захват" терминала на весь этот период. Перевод задания в фоновый режим позволяет освободить терминал для других целей. Чтобы выполнить команду в фоновом режиме, укажите после нее оператор &:команда


15.8.2. Оператор размещения new() и оператор delete()

Из книги автора

15.8.2. Оператор размещения new() и оператор delete() Оператор-член new() может быть перегружен при условии, что все объявления имеют разные списки параметров. Первый параметр должен иметь тип size_t:class Screen {public:void *operator new( size_t );void *operator new( size_t, Screen * );// ...};Остальные параметры