Pracuji na některých dávkových skriptech zahrnujících následující:
- Spouštějte některé neukončující dílčí procesy (asynchronně)
- Počkejte t sekund
- Proveďte jiný úkol X nějakou dobu
- Ukončit dílčí procesy
V ideálním případě bych chtěl být schopen rozlišit stdout dílčích procesů, které byly emitovány před X z toho, co bylo emitováno po X .
Napadá mě několik nápadů, i když netuším, jak bych je realizoval:
- Zahoďte stdout pro t sekund
- Vložte nějaký text (například „Úloha X zahájena“), abyste vizuálně oddělili části.
- Rozdělit stdout do různých výstupních proudů
Přijatá odpověď:
I když byste mohli celou záležitost zkomplikovat pomocí exec
a další hádky s popisovačem souborů, váš druhý návrh je nejjednodušší. Před spuštěním X , echo
řetězec značky do souboru protokolu.
Všechny tyto příkazy by byly připojeny ke stejnému souboru, takže možná by bylo dobré přidat před všechny výstupy X se značkou, takže můžete odlišit jeho výstup od jednoho ze stále běžících předchozích příkazů. Něco ve smyslu:
{ X; } | sed 's,^,[X say] ,'
Tím by byla další analýza mnohem jednodušší. Není to bezpečné a u velmi podrobných programů by se často stávaly závodní podmínky.
Pokud jste ochotni využít příležitosti prolomit jeden řádek protokolu a můžete bez následků přerušit první várku aplikací, fungovalo by to také:
{ Y; } >> log &
sleep $t
kill -STOP %% # last job, like the same as %1
echo -e "nX started" >> log
kill -CONT %%
{ X; } >> log2