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
.