셸 명령의 출력을 버퍼링 해제하는 방법은 무엇입니까?
출력 버퍼링없이 쉘 명령을 실행하는 방법이 있습니까?
예를 들어 hexdump file | ./my_script
는 hexdump의 입력을 한 줄씩이 아닌 버퍼 된 청크의 my_script로만 전달합니다.
실제로 명령을 버퍼링 해제하는 방법에 대한 일반적인 솔루션을 알고 싶습니다.
AFAIK, 추악한 해킹 없이는 할 수 없습니다. 파이프에 쓰기 (또는 읽기)는 자동으로 전체 버퍼링을 켜고 이에 대해 할 수있는 작업은 없습니다.-(. "라인 버퍼링"(원하는 것)은 터미널을 읽고 쓸 때만 사용됩니다. 추악한 해킹은 정확히이 작업을 수행합니다 : 프로그램을 의사 터미널에 연결하여 파이프의 다른 도구가 라인 버퍼링 모드에서 해당 터미널에서 읽고 쓸 수 있도록합니다. 전체 문제는 여기에 설명되어 있습니다.
페이지를 사용하여도 몇 가지 제안 할 것 (상기 "추한 해킹"), 예를 가지고 unbuffer
또는 일부 트릭을 당겨 LD_PRELOAD
.
stdbuf
GNU 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
'Development Tip' 카테고리의 다른 글
Angular : &를 사용하여 지시문 링크 함수 내에서 컨트롤러 함수 호출 (0) | 2020.12.02 |
---|---|
모델에 숫자를 사용하는 Angularjs ng-options가 초기 값을 선택하지 않습니다. (0) | 2020.12.02 |
내 앱 내에서 Apple Mail 앱을 시작 하시겠습니까? (0) | 2020.12.02 |
SQLITE 데이터베이스 파일 버전을 찾는 방법 (0) | 2020.12.02 |
XCode 6.3 경고 : 속성 합성 (0) | 2020.12.02 |