Найти в Дзене
Linux User

Конвейеры

Конвейер (Pipeline) - это последовательность одной или нескольких команд, разделенных одним из управляющих операторов '|' или '|&'. Формат конвейера следующий: [time [-p]] [!] command1 [ | or |& command2 ] … Выход каждой команды в конвейере подключается через пайп (pipe) к входу следующей команды. То есть, каждая команда читает вывод предыдущей команды. Это соединение выполняется до любых перенаправлений, указанных командой. Если используется '|&', стандартная ошибка command1, помимо стандартного вывода, подключается к стандартному вводу command2 через пайп, это сокращение для 2>&1 |. Это неявное перенаправление стандартной ошибки на стандартный вывод выполняется после любых перенаправлений, заданных командой. Зарезервированное слово time вызывает печать статистики времени для конвейера после его завершения. В настоящее время статистика состоит из истекшего времени (настенные часы) и времени пользователя и системы, затраченного на выполнение команды. Опция -p изменяет формат вывода на

Конвейер (Pipeline) - это последовательность одной или нескольких команд, разделенных одним из управляющих операторов '|' или '|&'.

Формат конвейера следующий:

[time [-p]] [!] command1 [ | or |& command2 ] …

Выход каждой команды в конвейере подключается через пайп (pipe) к входу следующей команды. То есть, каждая команда читает вывод предыдущей команды. Это соединение выполняется до любых перенаправлений, указанных командой.

Если используется '|&', стандартная ошибка command1, помимо стандартного вывода, подключается к стандартному вводу command2 через пайп, это сокращение для 2>&1 |. Это неявное перенаправление стандартной ошибки на стандартный вывод выполняется после любых перенаправлений, заданных командой.

Зарезервированное слово time вызывает печать статистики времени для конвейера после его завершения. В настоящее время статистика состоит из истекшего времени (настенные часы) и времени пользователя и системы, затраченного на выполнение команды. Опция -p изменяет формат вывода на формат, определенный POSIX. Когда оболочка находится в режиме POSIX, она не распознает время как зарезервированное слово, если следующая лексема начинается с '-'. Переменная TIMEFORMAT может быть установлена в строку формата, которая определяет, как должна отображаться информация о времени. Использование time в качестве зарезервированного слова позволяет определять время для встроенных модулей оболочки, функций оболочки и конвейеров. Внешняя команда time не может легко определить время.

Когда оболочка находится в режиме POSIX, за словом time может следовать новая строка. В этом случае оболочка отображает общее пользовательское и системное время, затраченное оболочкой и ее дочерними программами. Переменная TIMEFORMAT может быть использована для указания формата информации о времени.

Если конвейер не выполняется асинхронно, оболочка ожидает завершения всех команд в конвейере.

Каждая команда в конвейере выполняется в своей собственной подоболочке, которая является отдельным процессом. Если опция lastpipe включена с помощью встроенного модуля shopt, последний элемент конвейера может быть запущен процессом shell.

Статус завершения конвейера - это статус завершения последней команды в конвейере, если только не включена опция pipefail. Если опция pipefail включена, то статус возврата конвейера - это значение последней (самой правой) команды, которая завершилась с ненулевым статусом, или ноль, если все команды завершились успешно. Если перед конвейером стоит зарезервированное слово '!', то статус выхода является логическим отрицанием статуса выхода, как описано выше. Оболочка ожидает завершения всех команд в конвейере, прежде чем вернуть значение.