여러 프로그램을 병렬로 실행하고 출력을 하나의 파이프에 결합하고 싶다고 가정 해보십시오.
sh -c '
(echo qqq; echo qqq2; echo qqq3)&
(echo www; echo www2; echo www3)&
(echo eee; echo eee2; echo eee3)&
wait; wait; wait'
이 쉘 접근법은이 간단한 경우에는 잘 작동하지만 프로그램이 다음과 같이 버퍼링 된 방식으로 더 많은 라인을 출력하면 실패 할 것으로 예상됩니다 (구성됨).
qqq
qqwww
q2
qqq3www2
wwweee3
eee2
eee3
내가 사용하는 힌트 중 하나는 tail -f다음과 같습니다.
tail -n +0 -q -f <(echo qqq; echo qqq2; echo qqq3) <(echo www; echo www2; echo www3) <(echo eee; echo eee2; echo eee3)
그러나 이것은 차선책입니다. 데이터가 느리게 출력되고 종료되지 않습니다. 출력은 "슬립"순서가 아니라이 순서에서 인수 순서로 표시됩니다.
tail -n +0 -q -f <(sleep 1; echo qqq; sleep 1; echo qqq2; echo qqq3) <(echo www; echo www2; sleep 10; echo www3) <(echo eee; sleep 4; echo eee2; echo eee3) | cat
나는 이것을 위해 특별한 작은 프로그램을 구현 했지만 그것을하는 표준 좋은 방법이 있어야한다고 생각합니다.
표준 도구를 사용하고 tail -f단점 없이 어떻게합니까?
syslog.
syslog로그를 사용 하지 않고 사용자 정의가 OK로 간주됩니까?
-s꼬리 옵션을 언급 할 가치가 있다고 생각했습니다 . 예를 들어 tail -f -s .1 file루프 지연을 기본 1 초에서 0.1 초로 줄입니다.