대부분의 경우 여러 번 수행 했으므로 다음을 사용하여 긴 텍스트를 보는 것이 편리합니다 less
.
some_command | less
이제 stdin이 파이프 (FIFO)에 연결되었습니다. 여전히 up / down / quit와 같은 명령을 어떻게 읽을 수 있습니까?
less
stdin에서 데이터를 읽고 tty에서 명령을 읽습니다.
대부분의 경우 여러 번 수행 했으므로 다음을 사용하여 긴 텍스트를 보는 것이 편리합니다 less
.
some_command | less
이제 stdin이 파이프 (FIFO)에 연결되었습니다. 여전히 up / down / quit와 같은 명령을 어떻게 읽을 수 있습니까?
less
stdin에서 데이터를 읽고 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/tty
1991 년 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)
경우에 실패 열려진 읽기..)
less
stdin에서 표시 할 데이터를 읽고 tty에서 명령을 읽습니다. 그들은 다른 것입니다.