Пайплайны
pipeline представляет собой последовательность одного или нескольких команд, разделённых одним из управляющих операторов «|» или «|&».
Формат пайплайна выглядит следующим образом:
[time [-p]] [!] command1 [ | or |& command2 ] …
Вывод каждой команды в пайплайне подключается через канал к вводу следующей команды. То есть каждая команда считывает вывод предыдущей команды. Это подключение выполняется до указания любых перенаправлений, заданных командой command1.
Если используется «|&», стандартная ошибка command1 помимо стандартного вывода подключается к стандартному вводу command2 через канал; это сокращённая запись для 2>&1 |. Это неявное перенаправление стандартной ошибки в стандартный вывод выполняется после любых перенаправлений, заданных command1.
Зарезервированное слово time вызывает вывод статистических данных о времени выполнения пайплайна после его завершения. Эти данные включают время выполнения (по часам), время, затраченное пользователем, и время, затраченное системой на выполнение команды. Опция -p изменяет формат вывода на тот, который определён в POSIX. Когда оболочка находится в режиме POSIX (см. Режим POSIX в Bash), она не распознаёт time как зарезервированное слово, если следующий токен начинается с символа «-». Переменная TIMEFORMAT может быть установлена в строку форматирования, которая определяет, как следует отображать информацию о времени. См. Переменные Bash для описания доступных форматов. Использование time как зарезервированного слова позволяет измерять время выполнения встроенных команд оболочки, функций оболочки и пайплайнов. Внешняя команда time не может легко измерять время этих элементов.
Когда оболочка находится в режиме POSIX (см. Режим POSIX в Bash), time может быть последует за ним новой строкой. В этом случае оболочка отображает общее время, затраченное пользователем и системой оболочкой и её дочерними процессами. Переменная TIMEFORMAT может использоваться для задания формата информации о времени.
Если пайплайн не выполняется асинхронно (см. Списки команд), оболочка ждёт завершения всех команд в пайплайне.
Каждая команда в пайплайне с несколькими командами, где создаются каналы, выполняется в своей собственной подоболочке, представляющей собой отдельный процесс (см. Среда выполнения команд). Если опция lastpipe включена с помощью встроенной команды shopt (см. Встроенная команда Shopt), последний элемент пайплайна может быть выполнен процессом оболочки, когда управление задачами не активно.
Код возврата пайплайна — это код возврата последней команды в пайплайне, если не включена опция pipefail (см. Встроенная команда Set). Если pipefail включена, код возврата пайплайна — значение последней (правой) команды, завершившейся с ненулевым кодом возврата, или ноль, если все команды завершились успешно. Если перед пайплайном стоит зарезервированное слово «!», код возврата является логическим отрицанием кода возврата, как описано выше. Оболочка ждёт завершения всех команд в пайплайне, прежде чем вернуть значение.
Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
Licensed under the GNU Free Documentation License.
https://www.gnu.org/software/bash/manual/html_node/Pipelines.html