![명령은 호출기를 호출할 시기를 어떻게 결정합니까?](https://linux55.com/image/196010/%EB%AA%85%EB%A0%B9%EC%9D%80%20%ED%98%B8%EC%B6%9C%EA%B8%B0%EB%A5%BC%20%ED%98%B8%EC%B6%9C%ED%95%A0%20%EC%8B%9C%EA%B8%B0%EB%A5%BC%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EA%B2%B0%EC%A0%95%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
예를 들어 많은 양의 출력을 생성하는 일부 셸 명령은 git diff
출력이 너무 길면 교묘하게 호출기를 던지는 것처럼 보이지만 출력이 매우 작은 경우에는 그렇게 하지 않습니다.
어떻게 작동하나요? 각 개별 프로그램에는 출력을 측정하고 호출기를 호출하는 자체 코드가 있습니까? 출력이 너무 길다는 것을 인식하면 이미 stdout에 무언가를 인쇄하고 반환할 수 없습니까? 아니면 명시적으로 프로그래밍되지 않은 경우에도 모든 프로그램에서 활용할 수 있는 일반적인 셸 기능입니까?
분명히 하자면, foo | less
물론 호출기를 의무적으로 사용해야 하며, foo | cat
호출기를 의무적으로 사용하지 않는 것은 없을 것입니다. foo
임의의 동작을 수행 할 수 있는 방법이 있는지 궁금합니다 . 그리고 말 그대로 구현 (아마도 bash의 2~3줄로 수행될 수 있음)과 실행을 foo | pager_if_needed
의미하는 것은 아닙니다. 이는 , 그리고 다른 모든 것에 적용되지 않기 때문입니다 .pager_if_needed
alias foo="foo | pager_if_needed"
bar
baz
답변1
쉘은 호출기를 호출할 시기를 어떻게 결정합니까?
그러나 실제로는 그렇지 않습니다.
각 개별 프로그램에는 출력을 측정하고 호출기를 호출하는 자체 코드가 있습니까?
예.
출력이 너무 길다는 것을 인식하면 이미 stdout에 무언가를 인쇄하고 반환할 수 없습니까?
간단합니다. 출력물 인쇄를 시작하세요.뒤쪽에너무 긴지 확인하세요.