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 exec
y extradisputa de descriptores de archivos, tu segunda sugerencia es la más simple. Antes de empezarX, echo
una 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