私はこのようなシミュレーションを実行しています
./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します。