GNU/Linux >> Znalost Linux >  >> Linux

Zabijte program poté, co vypíše daný řádek ze skriptu shellu

Pokud se váš program ukončí na SIGPIPE (což je výchozí akce), mělo by stačit nasměrovat výstup do čtečky, která se po přečtení tohoto řádku ukončí.

Takže to může být tak jednoduché jako

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

Pokud chcete potlačit výchozí výstup použijte

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

Podobně, pokud někdo chce zastavit po určitém počtu řádků, mohl by místo sed použít hlavu, např.

$ program | head -n$NUMBER_OF_LINES_TO_STOP_AFTER

Přesný čas, kdy k zabití dojde, platí závisí na chování terminálu při ukládání do vyrovnávací paměti, jak navrhuje stardt v komentářích.


Obalový skript, jako je tento, je standardní přístup. Skript spustí program na pozadí a poté se zacyklí a každou minutu kontroluje, zda v souboru protokolu není nějaký řetězec. Pokud je řetězec nalezen, program na pozadí je ukončen a skript se ukončí.

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

Jako alternativa k odpovědi dmckee grep příkaz s -m Příkaz option (viz např. tato manuálová stránka) lze také použít:

compbio | grep -m 1 "Text to match"

zastavit, když je nalezen 1 řádek odpovídající textu nebo

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

čekat na 10 řádků, které neodpovídají danému textu.


Linux
  1. Upravit příchozí poštu z textu/prostého na text/html?

  2. Zastavit/ukončit proces z příkazového řádku po určité době?

  3. Odezva textu po příkazu Curl na stejném řádku?

  1. Odkud se spouští skript Shell?

  2. Je možné, aby skript bash shell interagoval s jiným programem příkazového řádku?

  3. Získejte konkrétní řádek z textového souboru pouze pomocí skriptu Shell

  1. Jak předat argument příkazového řádku do skriptu Shell?

  2. návratová hodnota z python skriptu do shell skriptu

  3. Jaký je nejrychlejší způsob přidání textu do souboru z příkazového řádku?