파이프를 통해 연결된 3개의 명령이 있다고 가정해 보겠습니다.
A | B | C
B가 오류 메시지를 stderr에 출력하고 일부 진행 상황을 터미널에 출력하기를 원합니다. stderr이 터미널과 동일하다면 간단합니다. 진행 정보를 stderr로 보내면 됩니다. 하지만 stderr이 리디렉션되면 어떻게 될까요?
A | B 2>/tmp/file | C
그런 다음 진행 정보를 터미널로 보내고 싶지만 오류 메시지는 파일로 전송됩니다.
이제 리디렉션되지 않았다면 stderr이 종료되었을 터미널을 어떻게든 식별할 수 있습니까?
내 초기 생각은 사용할 tty를 찾은 tty
다음 열고 거기에 쓰는 것이었습니다. 그러나 tty
B 내부에서 tty
say: 를 호출하면 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