GNU/Linux >> Tutoriales Linux >  >> Linux

Matar el programa después de que genera una línea dada, desde un script de shell

Si su programa terminará en SIGPIPE (que es la acción predeterminada), debería ser suficiente para canalizar la salida a un lector que se cerrará al leer esa línea.

Así que podría ser tan simple como

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

Si desea suprimir el uso de salida predeterminado

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

Del mismo modo, si uno quiere detenerse después de un cierto número de líneas, puede usar head en lugar de sed, por ejemplo,

$ program | head -n$NUMBER_OF_LINES_TO_STOP_AFTER

La hora exacta en la que se produce la matanza no dependen del comportamiento de almacenamiento en búfer del terminal como sugiere stardt en los comentarios.


Un script contenedor como este es un enfoque estándar. La secuencia de comandos ejecuta el programa en segundo plano y luego realiza un bucle, verificando el archivo de registro cada minuto en busca de alguna cadena. Si se encuentra la cadena, el programa en segundo plano se cancela y el script se cierra.

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

Como alternativa a la respuesta de dmckee, el grep comando con el -m También se puede usar el comando de opción (consulte, por ejemplo, esta página del manual):

compbio | grep -m 1 "Text to match"

detenerse cuando se encuentre 1 línea que coincida con el texto o

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

esperar 10 líneas que no coincidan con el texto dado.


Linux
  1. ¿Cómo pasar un argumento de línea de comando a un script de Shell?

  2. ¿Desde dónde se ejecuta un script de Shell?

  3. ¿Es posible hacer que un script bash shell interactúe con otro programa de línea de comandos?

  4. ¿Cómo eliminar un proceso secundario después de un tiempo de espera determinado en Bash?

  5. Ejecutar comandos de Shell desde el programa que se ejecuta en WINE

Programe hardware desde la línea de comandos de Linux

¿Modificar un correo entrante de texto/sin formato a texto/html?

¿Detener/matar un proceso desde la línea de comandos después de una cierta cantidad de tiempo?

¿Echo Text After Curl Command en la misma línea?

Bash Script para Center Fortune/texto de Stdin/pipe?

Cómo ejecutar scripts de Python desde shell