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