답변:
그들은 완전히 다른 방식으로 작동합니다.
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 | process3
process1이 종료되면 process2가 아직 완료되지 않았을 수 있습니다.