![인터럽트 전 강제 핑 쓰기](https://linux55.com/image/35523/%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8%20%EC%A0%84%20%EA%B0%95%EC%A0%9C%20%ED%95%91%20%EC%93%B0%EA%B8%B0.png)
여러 번 연속으로 파일에 쓰기 위해 ping을 시도하고 있습니다. 내가 달릴 때
$ ping 10 10.1.10.28 | perl -ne '/time=(\d+\.\d+)/ && print "$1\n"'
몇 밀리초마다 숫자를 반환합니다.
$ ping 10 10.1.10.28 | perl -ne '/time=(\d+\.\d+)/ && print "$1\n"'
191.523
312.225
127.506
그러나 파일로 리디렉션하고 tail -f
해당 파일을 다른 곳으로 리디렉션하면 아무 일도 일어나지 않습니다. Ctrl-C를 누르면 파일에 아무 것도 기록되지 않습니다.
새 데이터가 들어올 때 ping이 STDOUT에 쓰도록 하려면 어떻게 해야 합니까?
답변1
파이프 버퍼링으로 인해 어려움을 겪고 있습니다. 일반적으로 비대화형 터미널의 출력은 파이프될 때까지 4Kb 청크로 버퍼링되므로 이를 비활성화해야 합니다.
다음과 같이 명령줄을 변경할 수 있습니다.
$ stdbuf -oL ping 10.1.10.28 | perl -ne '$|=1; /time=(\d+\.\d+)/ && print "$1\n"' > file
stdbuf
coreutils의 일부입니다.
$|=1;
갈 길이야Perl에서 출력 버퍼링 비활성화.
PD ping 명령에서 추가 "10"을 제거했습니다.