GNU/Linux >> Belajar Linux >  >> Linux

Bunuh program setelah mengeluarkan baris tertentu, dari skrip shell

Jika program Anda akan berhenti di SIGPIPE (yang merupakan tindakan default), itu harus cukup untuk menyalurkan keluaran ke pembaca yang akan keluar saat membaca baris itu.

Jadi mungkin sesederhana

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

Jika Anda ingin menekan penggunaan output default

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

Demikian juga jika seseorang ingin berhenti setelah sejumlah baris tertentu, ia dapat menggunakan head sebagai pengganti sed, mis.

$ program | head -n$NUMBER_OF_LINES_TO_STOP_AFTER

Waktu yang tepat saat pembunuhan terjadi tidak tergantung pada perilaku buffering terminal seperti yang disarankan stardt di komentar.


Skrip pembungkus seperti ini adalah pendekatan standar. Skrip menjalankan program di latar belakang dan kemudian berulang, memeriksa file log setiap menit untuk beberapa string. Jika string ditemukan maka program latar belakang dimatikan dan skrip berhenti.

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

Sebagai alternatif dari jawaban dmckee, grep perintah dengan -m opsi (lihat misalnya halaman manual ini) perintah juga dapat digunakan:

compbio | grep -m 1 "Text to match"

untuk berhenti ketika 1 baris yang cocok dengan teks ditemukan atau

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

untuk menunggu 10 baris yang tidak cocok dengan teks yang diberikan.


Linux
  1. Bagaimana Cara Melewati Argumen Baris Perintah Menjadi Skrip Shell?

  2. Teks Gema Setelah Perintah Curl Pada Baris Yang Sama?

  3. Dari Mana Skrip Shell Dijalankan?

  1. Apakah mungkin membuat skrip bash shell berinteraksi dengan program baris perintah lain?

  2. Jalankan Perintah Shell dari Program yang berjalan di WINE

  3. Skrip shell berfungsi dengan baik tanpa garis shebang? Mengapa?

  1. Jalankan skrip shell di terminal baru dari terminal saat ini

  2. Dapatkan baris tertentu dari file teks hanya dengan menggunakan skrip shell

  3. mengembalikan nilai dari skrip python ke skrip Shell