rev를 다시 파이핑할 때 rev를 매뉴얼 페이지로 사용하는 프로그램이 실패하는 이유는 무엇입니까?

rev를 다시 파이핑할 때 rev를 매뉴얼 페이지로 사용하는 프로그램이 실패하는 이유는 무엇입니까?

PAGER나는 최근 환경 변수를 rev농담 으로 설정하는 교활한 트릭을 생각해 냈습니다 . rev에 대한 매뉴얼 페이지를 읽으려고 하면 man rev예상했던 것과 반대되는 내용이 보입니다.

호출기를 설정하지 않고 이 작업을 시도하려면 -P다음과 같은 옵션을 사용할 수 있습니다. 대신 매뉴얼 페이지가 표시됩니다.manman -P rev revrev

나를 혼란스럽게 하는 것은 단순히 rev 출력을 파이프하여 다시 올바르게 만들 수 없다는 것입니다. 실행을 시도했지만 man -P rev rev | rev출력이 올바른 방식으로 나오지 않고 여전히 그 반대입니다.

아래와 같이 올바른 방식으로 오류 메시지가 표시됩니다.

mdoc warning: A .Bl directive has no matching .El (#58)

stderr대신에 통과되기 때문에 이것이 올바른 방향이라고 생각합니다stdout

rev를 다시 파이프하면 모든 텍스트, 오류 메시지 등이 올바른 방향이 됩니다.

man -P rev rev | rev | rev

이 이상한 행동의 이유는 무엇입니까?

Ubuntu의 gnome 터미널에서 bash를 사용하고 있습니다.

답변1

man이는 출력이 터미널로 전송되지 않으면 호출기가 사용되지 않기 때문입니다 . 출력이 파이프로 전송되면 cat파이프의 출력일 뿐입니다. 그래서...

man rev | rev | rev

...그리고...

man -Prev rev | rev | rev

...동등합니다.

관련 정보