제 생각에는모든stdbuf -oL
파이프는 버퍼링되지 않으므로 모든 파이프 명령을 입력할 필요가 없습니다 . 여러 파이프가 있는 명령을 작성할 때 환경 변수나 이를 전역적으로 활성화하는 무언가가 있거나 적어도 명령의 나머지 파이프에 대해 있으면 좋을 것입니다.
네, 알아요 unbuffer
. stdbuf
하지만 파이프마다 호출해야 합니다... 자주 하는 일이라 타이핑을 아끼려고 합니다.
그것은 다음과 같습니다:
앞으로:
stdbuf -oL command_1 | stdbuf -oL command_2 | stdbuf -oL command_3
뒤쪽에:
BUFFERING=-oL command_1 | command_2 | command_3
답변1
stbuf
GNU Coreutils의 유틸리티는 환경 변수를 설정하여 LD_PRELOAD
모든 하위 프로세스가 공유 라이브러리를 열도록 강제합니다 . libstdbuf.so
또한 라이브러리에 인수를 전달하기 위해 다른 변수를 설정합니다.
이러한 환경 변수를 직접 설정할 수 있습니다.
env
그들이 무엇인지 봅시다 :
$ stdbuf -oL env | grep -E '^LD_PRELOAD|^_STDBUF_'
_STDBUF_O=L
LD_PRELOAD=/usr/lib/x86_64-linux-gnu/coreutils/libstdbuf.so
좋아, eval
위의 내용만 있으면 다음을 얻습니다.
$ eval $(stdbuf -oL env | grep -E '^LD_PRELOAD|^_STDBUF_')
$ echo $LD_PRELOAD
/usr/lib/x86_64-linux-gnu/coreutils/libstdbuf.so
$ echo $_STDBUF_O
L
한 가지 더, 우리는 아직 이 항목을 내보내도록 쉘에 지시하지 않았습니다.
$ export LD_PRELOAD _STDBUF
stdout
이제 우리가 실행하는 프로그램에서 C 스트림이 버퍼링 해제되어야 합니다.
그러나 다음을 사용하여 중첩 쉘을 실행하는 것이 더 간단해 보입니다 setbuf
.
$ stdbuf -oL bash
$ echo $LD_PRELOAD
/usr/lib/x86_64-linux-gnu/coreutils/libstdbuf.so
exec
원래 쉘을 교체하는 데 사용할 수 있습니다.
$ exec stdbuf -oL bash