Если я правильно понимаю, вы хотите записать выходные данные COMMAND1 с маркером, указывающим, что они исходят от COMMAND1. Вот как это сделать:
COMMAND1 | tee >(sed 's/^/command1: /' >>out.log) | COMMAND2
Обратите внимание, что:
command1:
в начале каждой строки, а не только в начале первой строки, что я считаю желательным, но это не то, что вы пытались сделать. command1
не должен содержать никаких специальных символов sed (, иначе они должны быть защищены обратной косой чертой ). out.log
открывается для добавления, нет риска перекрытия вывода, даже если несколько команд выводят данные в один и тот же файл журнала параллельно. out.log
открывается в этом фрагменте только один раз, все строки будут по порядку. Теперь о плохих новостях. :Если вы несколько раз заходите в один и тот же файл параллельно, нет никакой гарантии, что строки появятся в желаемом порядке. Например,
echo hello | tee >(sed 's/^/command1: /' >>out.log) | tr a-z A-Z | tee >(sed 's/^/command2: /' >>out.log)
может регистрировать command2: HELLO
до command1: HELLO
.
PIPE_BUF
байт, но я не уверен. Учитывая ограничения порядка и атомарности, я рекомендую вести журнал в отдельные файлы, и в этом случае вам не нужны префиксы.