Данное руководство описывает использование оператора 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 и оператора перенаправления (>) расширяет возможности управления потоками данных.