この関数は、ダウンロードしたファイルのサイズと転送速度を改行文字で区切って出力します。例:
20 #<< data
3.0M #<< speed
25
1.2M
今問題は次のとおりです。
output_data_func | xargs printf "Data transferred : %s\nSpeed : %s"
このコマンドはデータを正常に配置するのに有効ですが、問題はすべてのデータが最後に出力されることです。関数が次の値を出力している間は継続したいと思います。
私も試してみましたが、stdbuf -o0 xargs printf ...
まったく成功しませんでした。
echoを試しましたが、正しい場所にインポートできませんでした。
2つの可能な解決策が予想される。誰でも
- 印刷を続けるには、printfを使用してください。または
- 正しく配置され、エコー
答え1
できるだけ多くの引数を渡すのではなく(偶数は保証されていません)、-n2
2つの入力ワードごとに1つxargs
ずつ呼び出すと問題は解決しますが、プロセスを分岐し、2行ごとにプロセスをロード、初期化、実行、およびクリーンアップすることを意味します。 1回実行可能です。printf
printf
テキストを処理するには、テキスト処理ユーティリティを使用するのが最善です。
ここでは偶数sed
であれば十分です。awk
output_data_func | sed 's/^/Data transferred : /; n; s/^/Speed : /'
output_data_func | awk '
{getline speed; print "Data transferred : "$0"\nSpeed : "speed}'