대부분의 경우 여러 번 수행 했으므로 다음을 사용하여 긴 텍스트를 보는 것이 편리합니다 less.
some_command | less
이제 stdin이 파이프 (FIFO)에 연결되었습니다. 여전히 up / down / quit와 같은 명령을 어떻게 읽을 수 있습니까?
lessstdin에서 데이터를 읽고 tty에서 명령을 읽습니다.
대부분의 경우 여러 번 수행 했으므로 다음을 사용하여 긴 텍스트를 보는 것이 편리합니다 less.
some_command | less
이제 stdin이 파이프 (FIFO)에 연결되었습니다. 여전히 up / down / quit와 같은 명령을 어떻게 읽을 수 있습니까?
lessstdin에서 데이터를 읽고 tty에서 명령을 읽습니다.
답변:
에서 언급 한 바와 같이 윌리엄 Pursell , less터미널에서 사용자의 키 입력을 읽습니다. /dev/tty제어 터미널을 명시 적으로 엽니 다 . 표준 입력과 별도로 파일 설명자를 제공하여 사용자의 대화식 입력을 읽을 수 있습니다. 필요한 경우 표준 입력에서 표시 할 데이터를 동시에 읽을 수 있습니다. ( 필요한 경우 터미널에 직접 쓸 수도 있습니다 .)
당신은 이것을 실행하여 이것을 볼 수 있습니다
some_command | strace -o less.trace -e open,read,write less
입력 주위를 이동하고 종료 less하고 내용을 살펴 less.trace보십시오. open을 볼 수 /dev/tty있으며 파일 설명자 0과 파일을 열 때 반환 된 파일 설명자 /dev/tty(예 : 3) 를 모두 읽습니다 .
이것은 터미널에서 읽고 쓰기를 원하는 프로그램에 대한 일반적인 관행입니다. 예를 들어 , 비밀번호 나 비밀번호 문구를 요청할 때 SSH를 예로들 수 있습니다.
으로 설명 함으로써 schily , 경우 /dev/tty열 수 없습니다, less표준 오류 (파일 기술자 2)에서 읽습니다. less의 사용은 /dev/tty1991 년 4 월 2 일에 릴리스 된 버전 177에서 도입되었습니다.
실행하려고하면 cat /dev/tty | less같은 제안 에 의해 하겐 폰 Eitzen , less개방에 성공 /dev/tty하지만, 때까지 그것에서 모든 입력을받지 않습니다 cat를 닫습니다. 따라서 화면이 비어있는 것을 볼 수 있습니다.를 눌러 CtrlC죽일 때까지 cat(또는 다른 방법 으로 죽일 때까지) 아무것도 없습니다 . 그런 다음 실행 less하는 동안 입력 한 내용을 표시 cat하고 제어 할 수 있습니다.
cat blah |로 대체 될 수 있다고 생각 하며 < blah,이 경우에도 less blah작동하기 때문에 불필요 합니다 (잘, less -f /dev/tty). 그러나 읽는 /dev/tty것은 약간 특별한 경우이며 세 가지 변형 ( cat /dev/tty | less, less < /dev/tty및 less -f /dev/tty)은 모두 다른 결과를 생성합니다.
UNIX는 stdin이 리디렉션되는 동안 사용자 입력을 읽는 두 가지 방법을 제공합니다.
원래 방법은 stderr 에서 읽는 것 입니다. Stderr은 쓰기 와 읽기가 가능하며 POSIX에는 여전히 언급되어 있습니다.
이후의 UNIX 버전 (1979 년경) /dev/tty에는 프로세스 제어 tty를 열 수 있는 드라이버 인터페이스가 추가되었습니다 . 제어 tty가없는 프로세스가 있으므로 열기 시도가 /dev/tty실패 할 수 있습니다. 따라서 친숙한 서면 소프트웨어는 원래 방법으로 대체 된 다음 stderr에서 읽습니다.
dup(). 모두 tty에서 모두 열린 동일한 파일 설명의 라이센스가 있습니다. (분명히 POSIX는 여전히 필요 또는 제안 (이 답변이 뭔가를 열 수 없습니다 FD를, 쓰기 / 그 열려진 읽기 수) 말을하지 않는 open("/dev/ttyS0", O_WRONLY)경우에 실패 열려진 읽기..)
lessstdin에서 표시 할 데이터를 읽고 tty에서 명령을 읽습니다. 그들은 다른 것입니다.