GNU/Linux >> Linux Esercitazione >  >> Linux

Uccidi il programma dopo aver emesso una determinata riga, da uno script di shell

Se il tuo programma terminerà su SIGPIPE (che è l'azione predefinita) dovrebbe essere sufficiente reindirizzare l'output in un lettore che uscirà leggendo quella riga.

Quindi potrebbe essere semplice come

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

Se vuoi sopprimere l'output predefinito usa

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

Allo stesso modo se ci si vuole fermare dopo un certo numero di righe si potrebbe usare head al posto di sed, es.

$ program | head -n$NUMBER_OF_LINES_TO_STOP_AFTER

L'ora esatta in cui si verifica l'uccisione fa dipendono dal comportamento di buffering del terminale come suggerisce startt nei commenti.


Uno script wrapper come questo è un approccio standard. Lo script esegue il programma in background e quindi esegue il loop, controllando il file di registro ogni minuto per una stringa. Se la stringa viene trovata, il programma in background viene terminato e lo script si chiude.

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

In alternativa alla risposta di dmckee, il grep comando con -m option (vedi ad esempio questa pagina man) può essere utilizzato anche il comando:

compbio | grep -m 1 "Text to match"

per interrompersi quando viene trovata 1 riga corrispondente al testo o

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

attendere 10 righe che non corrispondono al testo specificato.


Linux
  1. Come eseguire script Python dalla shell

  2. Come uccidere un processo figlio dopo un determinato timeout in Bash?

  3. Esegui i comandi della shell dal programma in esecuzione in WINE

  4. Esegui uno script di shell nel nuovo terminale dal terminale corrente

  5. Ottieni una riga specifica dal file di testo usando solo lo script della shell

Programma hardware dalla riga di comando di Linux

Come passare un argomento della riga di comando in uno script di shell?

Arrestare/interrompere un processo dalla riga di comando dopo un certo periodo di tempo?

Script di Bash per centrare Fortune/testo da Stdin/pipe?

matlab esegue lo script dalla riga di comando linux

Qual è il modo più rapido per aggiungere testo a un file dalla riga di comando?