stdoutへの出力は機能しますが、ファイルまたはfifoにリダイレクトされると失敗します。

stdoutへの出力は機能しますが、ファイルまたはfifoにリダイレクトされると失敗します。

Wi-Fiアンテナがありますが、その位置を最適化したいです。この提案では、現在の待ち時間をリアルタイムで視覚化したいと思います。

ping待ち時間を出力するために1行のスクリプトを作成しました。

緯度:

ping 8.8.8.8|gawk '/64 bytes/{ match($7,/[0-9.]+/,arr); print((i++),"  ",arr[0]);}'

gnuplotを使ってプロットしたい。

plot "<lat.sh"

それは動作しません。 lat.shが端末に表示すべき内容を表示することがわかりました。たとえば、次のようになります。

$ ./lat.sh 
0    47.7
1    25.5
2    15.8
3    16.7

ただし、パイプへの出力は機能しません。./lat.sh > outfileまたは、端末には何も印刷されませんが、ファイル(またはパイプ)は空です./lat.sh|tee outfile./lat.sh &> outfilegnuplotパイプラインも同様です。本当に混乱しています。

ベストアンサー1

マクセルフのように説明する以下はバッファリングの問題です。この問題を解決する1つの方法は、awkすぐに使用を強制することですfflush()(残りは現在実行中の作業を単純化したバージョンです)。

ping 8.8.8.8 | gawk -F'[= ]' '/^64/{print i++,$(NF-1); fflush()}'

この呼び出しは、バッファがいっぱいになるのを待たずに出力が可能になるとすぐに出力されるようfflush()にします。awk

あるいは、ping特定の回数だけ実行してみることもできます。たとえば、10:

ping  -c 10 8.8.8.8 | gawk ...

おすすめ記事