コマンドの標準出力をt秒間破棄する

コマンドの標準出力をt秒間破棄する

私は次のようなバッチ スクリプトを作成中です。

  • 終了しないサブプロセスをいくつか実行する(非同期)
  • を待つt
  • その他のタスクを実行するバツしばらくの間
  • サブプロセスを終了する

理想的には、サブプロセスのstdoutを区別できるようにしたい。前に バツ放出されたものから バツ

いくつかのアイデアが思い浮かびますが、それをどのように実装するかはわかりません。

  • stdoutを破棄するt
  • セクションを視覚的に区切るために、テキスト(たとえば、「タスクXが開始されました」)を挿入します。
  • stdoutをさまざまな出力ストリームに分割する

答え1

問題を複雑にする可能性はありますexecが、ファイル記述子の調整2番目の提案は最も簡単です。始める前にバツechoログ ファイルにマーカー文字列を追加します。

これらのコマンドはすべて同じファイルに追加されるので、すべての出力を先頭に追加するのが良いかもしれません。バツマーカーを付けて、その出力をまだ実行中の以前のコマンドの 1 つと区別できるようにします。次のような内容です。

{ X; } | sed 's,^,[X say] ,'

これにより、さらなる分析がはるかに簡単になります。これは安全ではなく、非常に冗長なプログラムでは競合状態が頻繁に発生します。

1 つのログ ラインを中断するチャンスをいとわず、影響なく最初の一連のアプリを中断できる場合は、次の方法も有効です。

{ Y; } >> log &
sleep $t
kill -STOP %% # last job, like the same as %1
echo -e "\nX started" >> log
kill -CONT %%
{ X; } >> log2

関連情報