Будьте осторожны здесь; простое их отслеживание приведет к тому, что результаты будут смешиваться так, как вы этого не хотите: например, если они представляют собой файлы журнала, вы, вероятно, не хотите, чтобы строка от одного вставлялась на полпути через строку от другого. Если это нормально, тогда
tail -f / tmp / p1 / tmp / p2> / tmp / output
будет работать. Если это не так , то вам нужно найти что-то, что будет выполнять буферизацию строк и выводить только полные строки. Системный журнал делает это, но я не уверен, что еще могло бы.
РЕДАКТИРОВАТЬ: оптимизация для небуферизованного чтения и именованных каналов:
рассматривая / tmp / p1, / tmp / p2, / tmp / p3 как именованные каналы, созданные "mkfifo / tmp / p N "
tail -q -f / tmp / p1 / tmp / p2 | awk '{print $ 0> "/ tmp / p3"; закрыть ( "/ TMP / р3"); fflush ();} '&
теперь, таким образом, мы можем прочитать вывод именованного канала "/ tmp / p3" без буферизации :
tail -f / tmp / p3
Существует небольшая ошибка сортировки, вам нужно «инициализировать» 1-й канал ввода / tmp / p1:
echo -n> / tmp / p1
для того, чтобы tail примет вход от 2-го канала / tmp / p2 и не будет ждать, пока что-нибудь придет в / tmp / p1. это может быть не так, если вы уверены, что / tmp / p1 сначала получит ввод.
Также опция -q необходима для того, чтобы tail не печатал мусор с именами файлов.