Development Tip

셸 명령의 출력을 버퍼링 해제하는 방법은 무엇입니까?

yourdevel 2020. 12. 2. 22:05
반응형

셸 명령의 출력을 버퍼링 해제하는 방법은 무엇입니까?


출력 버퍼링없이 쉘 명령을 실행하는 방법이 있습니까?

예를 들어 hexdump file | ./my_script는 hexdump의 입력을 한 줄씩이 아닌 버퍼 된 청크의 my_script로만 전달합니다.

실제로 명령을 버퍼링 해제하는 방법에 대한 일반적인 솔루션을 알고 싶습니다.


AFAIK, 추악한 해킹 없이는 할 수 없습니다. 파이프에 쓰기 (또는 읽기)는 자동으로 전체 버퍼링을 켜고 이에 대해 할 수있는 작업은 없습니다.-(. "라인 버퍼링"(원하는 것)은 터미널을 읽고 쓸 때만 사용됩니다. 추악한 해킹은 정확히이 작업을 수행합니다 : 프로그램을 의사 터미널에 연결하여 파이프의 다른 도구가 라인 버퍼링 모드에서 해당 터미널에서 읽고 쓸 수 있도록합니다. 전체 문제는 여기에 설명되어 있습니다.

페이지를 사용하여도 몇 가지 제안 할 것 (상기 "추한 해킹"), 예를 가지고 unbuffer또는 일부 트릭을 당겨 LD_PRELOAD.


stdbufGNU coreutils와 거의 모든 Linux 배포판에 포함 된을 사용해보십시오 . 입력, 출력 및 오류에 대한 버퍼 길이를 0으로 설정합니다.

stdbuf -i0 -o0 -e0 command

명령 unbuffer로부터 expect: 패키지는 출력 버퍼링 비활성화
우분투 맨 : 버퍼 해제를 - 버퍼 해제 출력

사용 예 :

unbuffer hexdump file | ./my_script

script명령을 사용하여 hexdump라인 버퍼링 된 출력을 만들 수도 있습니다 ( 파이프가 아닌 터미널에 stdout을 쓰는 hexdump것을 속이는 의사 터미널에서 실행됩니다 hexdump).

# cf. http://unix.stackexchange.com/questions/25372/turn-off-buffering-in-pipe/
stty -echo -onlcr
script -q /dev/null hexdump file | ./my_script         # FreeBSD, Mac OS X
script -q -c "hexdump file" /dev/null | ./my_script    # Linux
stty echo onlcr

참고 URL : https://stackoverflow.com/questions/3465619/how-to-make-output-of-any-shell-command-unbuffered

반응형