Descartar stdout de um comando por t segundos

Descartar stdout de um comando por t segundos

Estou trabalhando em alguns scripts em lote envolvendo o seguinte:

  • Execute alguns subprocessos sem finalização (de forma assíncrona)
  • Esperar portsegundos
  • Executar outra tarefaXpor algum tempo
  • Encerrar subprocessos

Idealmente, eu gostaria de poder diferenciar o stdout dos subprocessos que foi emitidoantes Xdaquilo que foi emitidodepois X.

Algumas ideias vêm à mente, embora eu não tenha ideia de como implementá-las:

  • Descartar stdout paratsegundos
  • Insira algum texto (por exemplo, 'Tarefa X iniciada') para separar visualmente as seções
  • Divida o stdout em vários fluxos de saída

Responder1

Embora você possa complicar o assunto com execmaisdisputa de descritor de arquivo, sua segunda sugestão é a mais simples. Antes de começarX, echouma string de marcador no arquivo de log.

Todos esses comandos seriam anexados ao mesmo arquivo, então talvez fosse uma boa ideia acrescentar todas as saídas deXcom um marcador, para que você possa diferenciar sua saída daquela dos comandos anteriores ainda em execução. Algo como:

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

Isso tornaria a análise posterior muito mais simples. Não é seguro e para programas muito detalhados, as condições de corrida aconteceriam com frequência.

Se você estiver disposto a quebrar uma linha de log e interromper o primeiro lote de aplicativos sem consequências, isso também funcionaria:

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

informação relacionada