Linux Pipe: Перенаправление потоков данных

Данное руководство описывает использование оператора pipe (|) в Linux для перенаправления потоков данных между процессами.

Перенаправление стандартного вывода и стандартного вывода ошибок

Ранее рассматривалось перенаправление стандартного вывода (stdout) и стандартного вывода ошибок (stderr) в разные файлы. Работа велась с двумя потоками данных (stdout и stderr) и двумя файлами. Однако, как перенаправить данные из stdout одного процесса в stdin другого?

Оператор > и перенаправление в stdin

Попытка использовать тот же подход, что и с файлами, например, перенаправить stdout команды ls в stdin команды cut:

ls > cut

не работает. Оператор > не позволяет перенаправить данные из stdout или stderr в stdin другого процесса. Для этого служит оператор pipe (|).

Оператор Pipe (|)

Оператор pipe (|) отправляет данные из stdout одного процесса в stdin другого. Можно объединять несколько процессов, создавая цепочки. stderr не перенаправляется через pipe и выводится в терминал или перенаправляется в файл, как в предыдущих примерах.

Например, для отправки stdout команды ls в stdin команды cut:

ls | cut

stdout процесса ls отправляется в stdin процесса cut. Если cut ожидает входных данных, он получит их от ls.

stderr и оператор Pipe

Оператор pipe не перенаправляет stderr. Пример:

cut missing_file.txt | cut

Сообщение об ошибке от первой команды cut (из-за отсутствия файла) выводится в терминал, подтверждая, что stderr не перенаправляется через pipe.

Объединение Pipe и перенаправления

Комбинирование операторов pipe и перенаправления:

echo "Hello world" | cut > hello.txt

stdout команды echo перенаправляется в stdin команды cut, а stdout команды cut записывается в файл hello.txt. Если файл hello.txt отсутствует, он будет создан.

Результат не выводится в терминал, но содержимое hello.txt будет «Hello world».

Оператор pipe — мощный инструмент для обработки данных в Linux. Он позволяет соединять команды, создавая эффективные цепочки обработки данных. pipe работает только со стандартным выводом (stdout), а stderr требует отдельного перенаправления. Комбинация pipe и оператора перенаправления (>) расширяет возможности управления потоками данных.

Что будем искать? Например,программа