더 적은 파이프 찾기 - "위로"를 누르면 왜 올바른 줄만 남나요?

더 적은 파이프 찾기 - "위로"를 누르면 왜 올바른 줄만 남나요?

유용한 행을 필터링하는 좋은 방법을 우연히 발견했습니다 find. 맨 아래로 파이프를 연결 하고 맨 아래에 less표시되면 화살표 키를 눌러 올바른 행만 남겨 두세요. 아니요 , 심볼릭 링크 오류가 없습니다. 다른 것은 없습니다.(END)upPermission denied

find / -name foo | less

그런데 왜? 이 동작의 원인에 대한 답변을 찾을 수 없습니다. less결과가 아닌 행을 마술처럼 필터링하시겠습니까?

답변1

find-print"작업"이 없으면 전체 파일 이름을 표준 출력으로 출력하는 기본 작업이 적용됩니다. 오류는 표준 오류로 이동합니다.

파이프 연산자는 표준 출력만 리디렉션하므로 "올바른" 파일 이름만 전송되고 less다른 모든 것은 터미널인 표준 오류로 전송됩니다.less 반품터미널에 기록하면 처음에는 화면에 파일 이름과 오류가 표시되지만 위로 스크롤하면 less(또는 화면을 업데이트하도록 하는 다른 작업을 호출하면) less업데이트로 인해 오류가 덮어쓰여 집니다. less입력은 표준 출력에 표시됩니다 .find

에서 전체 출력을 넘기려면 less표준 오류도 리디렉션해야 합니다.

find / -name foo 2>&1 | less

오류를 완전히 무시하려면 오류를 비트 버킷으로 리디렉션하세요.

find / -name foo 2>/dev/null | less

답변2

그것 은 그 자체 와 아무 관련 이 없습니다 less. 표준 출력( stdout)과 표준 오류( stderr) 라는 두 가지 출력 스트림만 있습니다 . 예상한 대로 오류 메시지는 로 이동 stderr하고 일반 출력은 로 이동합니다 stdout. 기본적으로 파이프라인은 을 포착 stdout하고 무시합니다 stderr. find의 오류는 에 stderr전송되지 않으므로 오류를 필터링 less하는 것처럼 보입니다 .less

관련 정보