Синхронизация каналовLinux

Ответить
Anonymous
 Синхронизация каналов

Сообщение Anonymous »

Поэтому, после того как меня направили в эту тему, а также в ту тему, на которую есть ссылка в первой теме, у меня все еще нет решения моей проблемы.
Цель
Чтобы внести изменения в stderr и stdout, но сохранить исходный порядок печати.
Решения
Тот, с которого я начал и на который чаще всего ссылаются, следующий.

Код: Выделить всё

command > >(sed 's/.../.../')
2> >(sed 's/.../.../' >&2)
Оказывается, это вызывает некоторые состояния гонки и различные потенциальные асинхронные проблемы. И заказ не гарантирован.
Из двух веток, упомянутых выше, есть какие-то трубные решения.

Код: Выделить всё

{ { "$@" | sed 's/.../.../' >&3; } 2>&1 \
| sed 's/.../.../' >&2; } 3>&1
Решение с конвейером элегантно, но оно не поддерживает порядок вывода. Он выведет stdout, а затем stderr. Это то, что все называют синхронным решением, но «сохранение» stderr во время печати стандартного вывода перед выгрузкой всего stderr в конце на самом деле не является правильным синхронным решением.

Код: Выделить всё

fnc() {
echo "This is GOOD text"
echo "This is ERROR text" >&2

echo "This is GOOD text"
echo "This is ERROR text" >&2

echo "This is GOOD text"
echo "This is ERROR text" >&2
}

echo "Running test"
{ { fnc | sed 's/\(.*\)/  \1/' >&3; } 2>&1 \
| sed 's/\(.*\)/  \1/' >&2; } 3>&1
Это выведет:

Код: Выделить всё

Running test
This is GOOD text
This is GOOD text
This is GOOD text
This is ERROR text
This is ERROR text
This is ERROR text
Такое решение, как команда 2>&1 | не может быть единственным способом сделать это? Нет ли способа поддерживать оба потока, сохраняя при этом порядок синхронизации?

Подробнее здесь: https://stackoverflow.com/questions/783 ... ronization
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»