Descartar la salida estándar de un comando durante t segundos

Descartar la salida estándar de un comando durante t segundos

Estoy trabajando en algunos scripts por lotes que involucran lo siguiente:

  • Ejecute algunos subprocesos que no terminan (de forma asincrónica)
  • Esperartsegundos
  • Realizar otra tareaXdurante algún tiempo
  • Terminar subprocesos

Idealmente, me gustaría poder diferenciar la salida estándar de los subprocesos que se han emitido.antes Xde lo que ha sido emitidodespués X.

Se me ocurren algunas ideas, aunque no tengo idea de cómo implementarlas:

  • Descartar la salida estándar paratsegundos
  • Inserte algo de texto (por ejemplo, "Tarea X iniciada") para separar visualmente las secciones.
  • Divida la salida estándar en varios flujos de salida

Respuesta1

Si bien podrías complicar el asunto con execy extradisputa de descriptores de archivos, tu segunda sugerencia es la más simple. Antes de empezarX, echouna cadena de marcador en el archivo de registro.

Todos esos comandos se agregarían al mismo archivo, por lo que tal vez sería una buena idea anteponer toda la salida deXcon un marcador, para que pueda distinguir su salida de la de los comandos anteriores que aún se están ejecutando. Algo parecido a:

{ X; } | sed 's,^,[X say] ,'

Esto simplificaría mucho el análisis posterior. No es seguro y, para programas muy detallados, las condiciones de carrera ocurrirían con frecuencia.

Si está dispuesto a aprovechar la oportunidad de romper una línea de registro y puede interrumpir el primer lote de aplicaciones sin consecuencias, esto también funcionaría:

{ Y; } >> log &
sleep $t
kill -STOP %% # last job, like the same as %1
echo -e "\nX started" >> log
kill -CONT %%
{ X; } >> log2

información relacionada