[질문]
파이프/티/쓰기 조합이 행을 즉시 쓰도록 하는 방법이 있습니까? ...만약 가능하다면 절충점은 무엇입니까?
[배경]
내 스크립트는 실행 중인 터미널에 키 입력을 보냅니다 app
.
이 키를 누르면 app
쓰기가 발생합니다.표시로그에.
로그는애플리케이션일반 화면 출력(타임스탬프가 있는 줄).
로그는 다음을 통해 작성됩니다.| tee -a log
표시분수내가 원하는 라인. 타임스탬프가 있는 행앞으로표시.
문제는 내가 그때곧sed
동일한 스크립트를 사용하여 로그를 검색하면 때때로 이전 태그가 반환됩니다. 최신 태그가 아직 로그에 기록되지 않았습니다.
나는 이것이 버퍼링 문제라고 생각하지만 이것에 대해서는 미지의 영역에 있습니다.
이것이 중요한지 확실하지 않습니다. 스크립트는 쉘이 있는 elisp
.terminal 입니다.emacs terminal emulator
bash
답변1
문제는 tee
버퍼링을 하지 않았거나 최대 행 단위로 버퍼링했던 것을 기억하는 것 같지 않다는 것입니다.
따라서 문제가 귀하에게 있는 경우 app
이 유틸리티를 사용하여 해당 동작을 수정할 수 있습니다 stdbuf
( app
자체 표준 출력 버퍼링이 수정되지 않는 한). 다음과 같이 사용할 수 있습니다.
stdbuf -o 0 app args | tee -a log
이 -o 0
옵션은 stdout이 app
버퍼링되지 않도록 구성합니다.