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