私はこのようなシミュレーションを実行しています
./waf --run scratch/myfile | awk -f filter.awk
何かが起こったことwaf
を検出したらすぐに(たとえば、特定の行が読み取られた後)コマンドを強制終了するにはどうすればよいですか?filter.awk
変更できませwaf
んmyfile
。変更できるfilter.awk
のは、上記のコマンドだけです(明らかに)。
コメント後に更新:
waf
受信後に終了しませんSIGPIPE
(そうあるべきですか?)- クリーンアップが必要な子プロセスを生成します。
これは私自身の答え (そして挑戦)です。
@thatotherguyの答えと@Chrisの答えに取り組んだ後、私は少し単純化してこれを手に入れました:
tmp=$(mktemp)
{ ./waf --run scratch/myfile & echo $! > "$tmp"; } | { awk -f filter.awk; pkill -P $(<$tmp); kill $(<$tmp); }
残念ながら、ファイルを削除できませんでした。変数としてtmp
を渡す試みはすべて失敗しました。PID
受け入れられた答えは変更しませんが(本当に必要なときに機能したので)、もっと単純化できる人には+1します。