Spec-Zone.ru › Bash

Конвейеры

​ ​

pipeline — это последовательность из одной или нескольких команд, разделённых одним из управляющих операторов «|» или «|&».

​ ​ ​

Формат конвейера:

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

Вывод каждой команды в конвейере через канал передаётся на вход следующей команды. Иными словами, каждая команда читает вывод предыдущей команды. Это соединение создаётся до любых перенаправлений, указанных для command1.

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

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

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

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

Каждая команда в конвейере из нескольких команд, соединённых каналами, выполняется в собственной подоболочке, то есть в отдельном процессе (см. Среда выполнения команд). Если параметр lastpipe включён с помощью встроенной команды shopt (см. Встроенная команда Shopt) и управление заданиями не активно, последний элемент конвейера может выполняться процессом оболочки.

Код завершения конвейера совпадает с кодом завершения последней команды в конвейере, если не включён параметр pipefail (см. Встроенная команда Set). Если включён pipefail, код возврата конвейера равен значению кода последней (самой правой) команды, завершившейся с ненулевым кодом, или нулю, если все команды завершились успешно. Если перед конвейером стоит зарезервированное слово «!», код завершения представляет собой логическое отрицание кода завершения, определённого выше. Если конвейер не выполняется асинхронно (см. Списки команд), оболочка ожидает завершения всех команд в конвейере, прежде чем вернуть значение. Код возврата асинхронного конвейера равен 0.

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API