모든 파일 설명자를 파일로 리디렉션

모든 파일 설명자를 파일로 리디렉션

알려진 파일 설명자에서 파일로 출력을 리디렉션하는 것은 다음과 같습니다.

./binary 1> ./file 2>&1

0그러나 , 1및 이외의 파일 설명자를 사용할 수 있는 이진 파일이 있다고 가정해 보겠습니다 2.

파일 설명자, 명령이 대화형으로 실행되는 1경우 2기본값은 현재 파일 설명자입니다.tty

바이너리를 대화형으로 실행 중인데 바이너리에 현재 파일을 가리키는 다른 파일 설명자가 있는 것 같습니다. tty파일 설명자를 파일 1로 리디렉션했지만 2여전히 일부 출력이 파일 대신 터미널에 기록되고 있기 때문입니다.

아마도 사용하고 있는 다른 파일 설명자가 많이 있을 것입니다 n. 그러나 어떤 것을 사용하고 있는지는 모르겠습니다.

tty현재 파일을 가리키는 모든 파일 설명자를 파일로 리디렉션하고 싶습니다 .

바이너리가 어떤 파일 설명자에 쓰는지는 상관하지 않습니다. 모든 스트림은 해당 파일로 리디렉션되어야 합니다.

약간

./binary *> ./file

답변1

명령이 대화형으로 실행되는 경우 파일 설명자 1과 2는 기본적으로 현재 tty로 설정됩니다.

아니요, 현재 tty를 가리키지 않습니다. stdout 및 stderr이며 아마도 쉘과 터미널 설정 방식을 통해 현재 터미널로 라우팅될 것입니다. 한 가지 중요한 차이점은 리디렉션이 stdout과 stderr을 특정 파일 설명자에 연결하지만 터미널 자체와 상호 작용하는 사람들은 이에 영향을 받지 않는다는 것입니다.

man 7 pty바이너리가 여전히 리디렉션되지 않은 터미널에 쓰고 있다면 아마도 stdout과 상호 작용하지 않을 것입니다 . ncurses와 같은 라이브러리를 통해 의사 터미널(자세히 알아보기)과 직접 상호 작용하고 있을 것입니다 .

이것은 문자 장치이고 작성된 내용을 "스누핑"할 수 있지만 "선형화된" 형식에서는 의미가 없을 수 있습니다. 응용 프로그램이 단어를 뒤로 쓰는 것을 막는 것은 없습니다("오른쪽으로 2자리 이동, 인쇄 o, 오른쪽으로 2자리 이동, 인쇄 l, 오른쪽 2자리 이동, 인쇄 l, 오른쪽 2자리 이동, 인쇄 e, 오른쪽으로 2비트 이동). , "hello" 대신 h"를 인쇄합니다. 또한 이러한 프로그램은 화면의 상당 부분을 즉시 업데이트하는 경향이 있습니다.

관련 정보