답변:
less
텍스트를 표준 출력으로 인쇄합니다. 표준 외출
less text | cut -d: -f1
)less text > tmp
"isa tty " 라는 C 함수가 있는데,이 함수 는 출력이 tty (4.81, main.c, 112 행 이하)로 가는지 확인합니다. 그렇다면 버퍼 뷰어를 사용하고 그렇지 않으면처럼 동작 cat
합니다.
bash에서는 test를 사용할 수 있습니다 (참조 man test
)
예:
[[ -t 1 ]] && \
echo 'STDOUT is attached to TTY'
[[ -p /dev/stdout ]] && \
echo 'STDOUT is attached to a pipe'
[[ ! -t 1 && ! -p /dev/stdout ]] && \
echo 'STDOUT is attached to a redirection'
stdout
"파일에 쓸 수있는"것이 아닙니다. 당신이 write()
하는 일 입니다. less
출력이 파일, 파이프, 소켓 또는 블록 장치인지 여부에 따라 다르게 수행하지 않아도됩니다. 그것은 tty가 아니라는 것만 중요하므로 그냥 동작 cat
합니다. (나는 당신이 이것을 알고 있고 그것을 설명하기 위해 잘못된 단어를 선택했다고 가정하지만, 나는 이것을 다른 독자들에게 지적 할 것이라고 생각했습니다).
less
나오는 "그림"을 찾지 않습니다 cat
. cat
stdout이 tty가 아닌 경우 다음에 무엇이든 상관없이 작동 합니다.
less
TCGETS 하나를 사용하여 터미널 크기를 얻거나 tty가 아니라는 것을 알았지 만 분명히 잘못 추측했습니다.
less
stdout
터미널 인지 확인하고 그렇지 않은 경우 처럼 동작합니다 cat
(EOF까지 stdin을 stdout에 복사합니다).
이 기능을 사용하면 항상 출력 (예 : --help
출력)을 보내면서 less
파일로 쉽게 리디렉션 할 수있는 스크립트 나 프로그램을 작성할 수 있습니다 . some_command --fullhelp > help.txt
stdin의 스페이스 바가 텍스트 등을 통해 페이지를 넘길 때까지 기다리면 짜증이납니다 . 일부 명령 (예 :) man
은 자체 출력을 확인하여 호출기를 통해 출력을 보낼지 여부를 결정합니다. 을 실행하면을 (를) man ls > ls.txt
호출하지 않습니다 $PAGER
.
less
파이프 라인에 스테이지를 더 추가 할 때 하나의 라이너에서 편집하는 것을 잊어 버린 경우 고양이 같은 동작이 편리합니다.
less
터미널 크기 (화면 크기, 한 번에 몇 줄을 표시할지 알기 위해)를 알아야합니다. 는 ioctl(2)
그것의 사용 stdout
어쨌든 비 터미널의 경우를 처리 피할 수 있도록, 비 터미널에 ENOTTY를 반환합니다. less
실제로 isatty(3)
터미널 크기를 확인하기 전에 사용 하지만 isatty
tty 전용 ioctl을 시도하고 오류가 없는지 확인하여 작동합니다.
more(1)
(최소한 util-linux 버전 과 같은) 간단한 호출기 조차도이 기능을 가지고 있습니다. 왜냐하면 아마도이 경우를 위해 구현하는 가장 단순한 제정신 행동 일 것입니다.
무언가 를 less
(예를 들어 grep foo bar.txt | less
)에 파이프 할 때 /dev/tty
키보드 입력 을 위해 열어야 합니다. (로이 작업을 수행하는 것을 볼 수 있습니다 echo foo | strace less
).
bash script.sh
,bash script.sh | cat
,bash script.sh > file
, 당신이 무엇을 얻을 출력을 참조하십시오.