파이프라인 중간에 있는 제어 터미널

파이프라인 중간에 있는 제어 터미널

파이프를 통해 연결된 3개의 명령이 있다고 가정해 보겠습니다.

A | B | C

B가 오류 메시지를 stderr에 출력하고 일부 진행 상황을 터미널에 출력하기를 원합니다. stderr이 터미널과 동일하다면 간단합니다. 진행 정보를 stderr로 보내면 됩니다. 하지만 stderr이 리디렉션되면 어떻게 될까요?

A | B 2>/tmp/file | C

그런 다음 진행 정보를 터미널로 보내고 싶지만 오류 메시지는 파일로 전송됩니다.

이제 리디렉션되지 않았다면 stderr이 종료되었을 터미널을 어떻게든 식별할 수 있습니까?

내 초기 생각은 사용할 tty를 찾은 tty다음 열고 거기에 쓰는 것이었습니다. 그러나 ttyB 내부에서 ttysay: 를 호출하면 not a tty이는 A와 B 사이의 파이프 때문이라고 생각합니다.

Perl을 사용하여 이 작업을 수행하고 싶습니다.

답변1

Linux 관련:

echo |perl -e '$p=getppid; `echo foo > /proc/$p/fd/2`'

여기서 stderr를 리디렉션하면 'foo'가 여전히 터미널에 인쇄됩니다.

echo |perl -e '$p=getppid; `echo foo > /proc/$p/fd/2`' 2>/dev/null

관련 정보