stdout 버퍼링을 제거하기위한`unbuffer` 또는`stdbuf`?


13

unbuffer (1)와 stdbuf (1)의 차이점이 있습니까? 내가 수집 한 것으로부터 unbuffer는 처음에 libc 함수 set (X) buf를 호출 한 다음 물건을 놓는 "최선의 노력"이상을 만드는가?

답변:


14

그들은 완전히 다른 방식으로 작동합니다.

unbuffer 프로그램은 이름 지정된 명령을 실행할 것으로 예상합니다. expect는 자식 프로세스의 stdout에 첨부 할 의사 (pseudo-tty)를 생성하므로 자식은 블록 버퍼링 대신 라인 버퍼링을 사용해야한다고 생각할 수 있습니다. 일부 프로그램은 isatty (stdout)가 true 일 때 동작이 변경되고 다른 프로그램은 그렇지 않으며 어떤 것인지 아닌지를 알기가 매우 어렵습니다.

stdbuf 프로그램은 동적으로로드 된 바이너리에 대해 libstdbuf를 libc 앞에 놓으려고 시도합니다. 여기서 libstdbuf는 libc stdio 호출의 기본 버퍼링 전략을 재정의합니다.

나는 이것을 발견했다.

 apt-get source expect coreutils

각 프로그램의 관련 소스를 읽습니다.


맨 페이지의 일부 걱정스러운 사항 : unbuffer -p프로세스가 입력을 버퍼 해제에 공급하면 프로세스가 올바르게 작동하지 않는 것처럼 보일 수 있습니다. 고려 사항 : process1 | unbuffer -p process2 | process3process1이 종료되면 process2가 아직 완료되지 않았을 수 있습니다.

stdbuf는 C 스트림을 사용하는 프로그램의 stdin 버퍼링을 제어 할 수도있는 것으로 보입니다. 아마도 이것은 미래 독자들의 이익을 위해 답에 포함되어야합니다.
dan3
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.