Descartar stdout de um comando por t segundos

4

Estou trabalhando em alguns scripts em lote envolvendo o seguinte:

  • Executar alguns subprocessos que não terminam (de forma assíncrona)
  • Aguarde t segundos
  • Executar outra tarefa X por algum tempo
  • Encerrar subprocessos

Idealmente, gostaria de poder diferenciar o stdout dos subprocessos que foram emitidos antes X do que foi emitido após X .

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

  • Descartar stdout por t segundos
  • Insira algum texto (por exemplo, "Tarefa X iniciada") para separar visualmente as seções
  • Split stdout em vários fluxos de saída
por WaelJ 12.07.2012 / 14:29

1 resposta

2

Embora possa complicar o assunto com exec e disputa de descritores de arquivo sua segunda sugestão é a mais simples. Antes de iniciar X , echo uma string de marcador no arquivo de log.

Todos esses comandos estariam anexados ao mesmo arquivo, então talvez seja uma boa ideia anexar todas as saídas de X com um marcador, para que você possa diferenciar sua saída da de os comandos anteriores ainda em execução. Algo ao longo das linhas de:

{ 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 acontecem com frequência.

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

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