![모든 파일 설명자를 파일로 리디렉션](https://linux55.com/image/193166/%EB%AA%A8%EB%93%A0%20%ED%8C%8C%EC%9D%BC%20%EC%84%A4%EB%AA%85%EC%9E%90%EB%A5%BC%20%ED%8C%8C%EC%9D%BC%EB%A1%9C%20%EB%A6%AC%EB%94%94%EB%A0%89%EC%85%98.png)
알려진 파일 설명자에서 파일로 출력을 리디렉션하는 것은 다음과 같습니다.
./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"를 인쇄합니다. 또한 이러한 프로그램은 화면의 상당 부분을 즉시 업데이트하는 경향이 있습니다.