GNU/Linux >> Linux の 問題 >  >> Linux

シェルスクリプトから、特定の行を出力した後にプログラムを強制終了します

プログラムが SIGPIPE (デフォルトのアクション) で終了する場合は、その行を読み取って終了するリーダーに出力をパイプするだけで十分です。

したがって、それは次のように単純かもしれません

$ program | sed -e '/Suitable text from the line/q'

デフォルトの出力を抑制したい場合

$ program | sed -n -e '/Suitable text from the line/q'

同様に、特定の行数で停止したい場合は、sed の代わりに head を使用できます。例:

$ program | head -n$NUMBER_OF_LINES_TO_STOP_AFTER

キルが発生した正確な時刻 startdt がコメントで示唆しているように、端末のバッファリング動作に依存します。


このようなラッパー スクリプトは、標準的なアプローチです。スクリプトはバックグラウンドでプログラムを実行してからループし、ログ ファイルで文字列を毎分チェックします。文字列が見つかった場合、バックグラウンド プログラムは強制終了され、スクリプトは終了します。

command="prog -foo -whatever"
log="prog.log"
match="this is the what i want to match"

$command > "$log" 2>&1 &
pid=$!

while sleep 60
do
    if fgrep --quiet "$match" "$log"
    then
        kill $pid
        exit 0
    fi
done

dmckee の回答の代わりに、 grep -m のコマンド オプション (このマニュアルページなどを参照) コマンドも使用できます:

compbio | grep -m 1 "Text to match"

テキストに一致する行が 1 行見つかったときに停止するか、

compbio | grep -v -m 10 "Text to match"

指定されたテキストに一致しない 10 行を待機します。


Linux
  1. 一定の時間が経過した後、コマンドラインからプロセスを停止/強制終了しますか?

  2. シェルスクリプトはどこから実行されますか?

  3. bash シェル スクリプトを別のコマンド ライン プログラムと対話させることは可能ですか?

  1. WINEで実行中のプログラムからシェルコマンドを実行

  2. シェルスクリプトだけを使用してテキストファイルから特定の行を取得する

  3. Pythonスクリプトからシェルスクリプトへの戻り値

  1. コマンドライン引数をシェルスクリプトに渡す方法は?

  2. 着信メールをText/plainからText/htmlに変更しますか?

  3. コマンド ラインからファイルにテキストを追加する最も簡単な方法は何ですか?