`docker 로그 foo | less`는 검색이나 스크롤이 불가능하지만 `dockerlogs foo 2>&1 less`는

`docker 로그 foo | less`는 검색이나 스크롤이 불가능하지만 `dockerlogs foo 2>&1 less`는

읽을 수 있는 텍스트를 얻으려면 다음 중 하나를 사용하십시오. 그러나 stderr 리디렉션을 통해서만 스크롤하거나 /somepattern을 입력하고 일치하는 항목을 얻을 수 있습니다.

이것이 없으면 검색 시 "검색할 내용이 없습니다(RETURN 누르기)" 및 열 ~가 표시됩니다.

주어진 경우, stderr과 stdout은 동일하지 않지만, 왜 less로 작업을 시작할 때까지 less가 동일하다고 표시합니까?

이것은 아마도 내가 이해하지 못하는 이상한 다중 창 vim 일 것입니다. 아이디어?

답변1

+--------------------+        +------+       +----------+
|             stdout |·······→| less |——————→|          |
| somecommand        |        +------+       | terminal |
|             stderr |——————————————————————→|          |
+--------------------+                       +----------+

표준 오류로 텍스트를 인쇄하는 경우 를 실행할 somecommand때 및 둘 다 터미널에 인쇄됩니다 . stderr의 명령 출력은 리디렉션되지 않기 때문에 터미널에 직접 출력되지 않습니다. 첫째 , less가 초기화되면 출력이 스크롤되어 프롬프트 줄을 표시한 다음 완료되면 less는 입력이 완료되었음을 알립니다(파이프가 닫혔기 때문입니다). 다음을 시도해 볼 수도 있습니다. 실행somecommand | lesssomecommandlesslesssomecommandsomecommand

{ sleep 1; somecommand; sleep 1; } | { sleep 0; less; }

또한 somecommandless가 준비되기 전이나 후에 출력을 생성하는 절전 시간을 변경하고 파이프가 닫힐 때 어떤 일이 일어나는지 확인하세요.

관련 정보