割り込み前の強制ping書き込み

割り込み前の強制ping書き込み

私は何度も連続してファイルに書き込むために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

stdbufcoreutilsの一部です。

$|=1;行く道Perlで出力バッファリングを無効にする

PD pingコマンドから追加の「10」を削除しました。

関連情報