В unix по умолчанию всем процессам предоставляется два уже открытых потока, через которые они могут отправлять вывод - стандартный вывод и стандартная ошибка - и другой поток, в который они могут получать ввод - стандартный ввод.Вы можете думать о них как о файлах, которые уже открыты и доступны до начала процесса.
Идея состоит в том, что программы должны отправлять выходные данные, которые могут обрабатываться другой программой, на стандартный вывод и (более уместно для этогопример) любые ошибки или полезную диагностику следует отправлять на стандартную ошибку.Если программа предназначена для фильтрации данных, она должна читать эти данные из стандартного ввода.
В оболочке оператор pipe (|
) может использоваться для подключения стандартного вывода команды слева.к стандартному вводу команды справа.В вашем примере вы подключили стандартный выход git
к стандартному входу sed
.Вот почему некоторые из выходных данных git
имеют префикс.
Нефиксированные данные были отправлены git
через стандартный поток ошибок.
Для фильтрации git
'В стандартном потоке ошибок вы должны сначала указать своей оболочке подключить этот поток, куда идет стандартный поток вывода, запустив его следующим образом:
git checkout master --progress 2>&1
Когда он передается по каналу sed
:
git checkout master --progress 2>&1 | sed -e "s/^/[tag] -- /"
... будет иметь префикс перед всеми выходными данными git
.
Для получения дополнительной информации о 2>&1
, запустите man bash
и найдите раздел REDIRECTION .