tee에게 모든 파일 설명자를 화면에 인쇄하고 표준 출력만 파일에 저장하도록 어떻게 지시할 수 있나요?

tee에게 모든 파일 설명자를 화면에 인쇄하고 표준 출력만 파일에 저장하도록 어떻게 지시할 수 있나요?

stdout내 프로그램이 여러 파일 설명자로 인쇄되고 인쇄하는 동안 모든 출력을 관찰해야 하지만 파일에만 저장해야 한다고 가정해 보겠습니다 . 어떻게 해야 하나요?

답변1

3이 관심 있는 파일 설명자 중 하나라고 가정합니다. 3은 을 가리킬 수 있습니다 file. 예를 들면 다음과 같습니다.

exec 3>file

귀하의 애플리케이션은 3을 씁니다.

app() { echo hello world >&3; }

3을 가로채려면 dup이를 다른 파일 설명자(예: 4)로 전송해야 합니다.

exec 4>&3

파이프를 사용하여 3을 인터셉터 프로세스로 리디렉션합니다. 이는 원래 대상에 다시 작성해야 하며(그렇지 않으면 인터셉터가 아님) 이제 fd 4에 저장됩니다.

app 3> >(tee /dev/tty >&4) #this interceptor writes to the terminal

위의 내용은 hello world터미널에 인쇄되어 file결국 종료되어야 합니다 hello world.

이 모든 것은 프로세스를 시작하기 전에 이러한 파일 설명자가 이미 열려 있다고 가정합니다. 런타임에 파일 설명자 출력을 동적으로 가로채려면 코드를 수정하거나 런타임에 삽입하거나 ptrace.

관련 정보