標準出力周波数に従ってコマンドを実行します。

標準出力周波数に従ってコマンドを実行します。

標準出力にテキスト配置を非常にすばやく作成するプログラムがありますが、出力には目的のループを作成できる特定の出力はありません。私のプログラムの標準出力例:

[time:here] random text 1
[time:here] random text 2
[time:here] random text 3
[time:here] random text 4
[time:here] random text 5
[time:here] random text 6
[time:here] random text 7

それから私がやり取りするのを待ってから、同じスタイルのテキストを使って標準出力に書き戻します。

[time:here] random text 8
[time:here] random text 9
[time:here] random text 10
[time:here] random text 11
[time:here] random text 12
[time:here] random text 13
[time:here] random text 14

stdoutは数ミリ秒のように非常に高速に印刷され、対話するのを待つ必要があります。対話するとすぐに、stdoutはすばやく書き換えてから待ちます。プログラムを閉じるまでこれを繰り返します。

echo待つ間にプログラムとやり取りするとき(または同様のものを使用して)、別のファイルに書き込むコマンドを送信したいと思います。

echo「待機」をターゲットにして標準出力を待つたびにコマンドを実行する方法はありますか?たとえば、待機時間が5秒より長い場合は、コマンドを実行してechostdoutが再び変更されるのを待ちますか?

答え1

タイムアウトのある読み取りブロックを使用して、出力が停止するタイミングを決定できます。たとえば、Bashはタイムアウトreadパラメータをサポートします。 STDIN出力が2秒以上停止すると、次のスクリプトは1行を作成します。

#!/bin/sh

while read -r firstline; do
    while read -r -t 2 line; do
        continue
    done
    echo "---- No data in 2 seconds ----"
done

必要に応じて、エコーを別のログにリダイレクトでき、標準から読み取られたデータをエコーするようにスクリプトを変更できます。

関連情報