나는 거의 모든 가능한 비슷한 질문 을 탐색했지만 아무 소용이 없습니다.
문제를 자세하게 설명하겠습니다.
무인 스크립트를 실행하면 표준 출력 및 표준 오류 행이 생성 될 수 있습니다 . 터미널 에뮬레이터에서 표시 한대로 정확한 순서로 캡처 한 다음 "STDERR :"및 "STDOUT :"과 같은 접두사를 추가하고 싶습니다.
나는 파이프와 epoll 기반 접근 방식을 사용해 보았습니다. 나는 마스터가 아니지만 솔루션이 pty 사용법이라고 생각합니다. 나는 또한 Gnome VTE 의 소스 코드를 들여다 보았지만 그다지 생산적이지는 않았다.
이상적으로 는 Bash 대신 Go 를 사용 하여이 작업을 수행하지만 수행 할 수 없었습니다. 파이프로 인해 버퍼링으로 인해 올바른 라인 순서를 유지하지 못하는 것처럼 보입니다.
누군가 비슷한 것을 할 수 있었습니까? 아니면 불가능한가요? 터미널 에뮬레이터가 그렇게 할 수 있다면 PTY를 다르게 처리하는 작은 C 프로그램을 만드는 것이 아닐까요?
이상적으로는 비동기 입력을 사용 하여이 2 개의 스트림 (STDOUT 및 STDERR)을 읽은 다음 필요에 따라 다시 인쇄하지만 입력 순서는 중요합니다!
참고 : stderred를 알고 있지만 Bash 스크립트에서는 작동하지 않으며 접두사를 추가하기 위해 쉽게 편집 할 수 없습니다 (기본적으로 많은 syscall을 래핑하기 때문에).
업데이트 : 두 요점 아래에 추가
(일관된 결과를 증명하기 위해 제공 한 샘플 스크립트에 1 초 미만의 임의 지연이 추가 될 수 있음)
업데이트 : 이 질문에 대한 해결책 은 @Gilles가 지적 했듯이이 다른 질문을 해결할 것입니다. 그러나 나는 여기 저기에서 요구 한 것을 할 수 없다는 결론에 도달했습니다 . 2>&1두 스트림 을 모두 pty / pipe 수준에서 올바르게 병합 할 때 스트림을 개별적이고 올바른 순서로 사용하려면 실제로 시스템 콜 후크를 포함하고 여러 가지 방법 으로 더티 로 보일 수있는 stderred 의 접근 방식을 사용해야 합니다 .
누군가 위의 내용을 거부 할 수 있다면이 질문을 업데이트하기를 열망합니다.