Objevil jsem (pro sebe dosud skrytou) vlastnost shellu. Obcas potrebuju
spustit vice prikazu paralelne, napriklad v cyklu. Priklad:
for i in SEZNAM ...; do
( prikaz1; prikaz2; ... ) &
done 2>&1
KONEC SOUBORU
Timto zpusobem se skript spusti, spusti sekvencni n-tice prikazu v zavorkach
vsechny najednou na pozadi a ukonci se. Vystupy podprikazu z pozadi vam pak
zadelavaji prikazovou radku.
Shell je ale chytry. Pokud mu reknete, ze vystupy tech podprikazu k necemu
potrebujete, pocka na dokonceni vsech. Pokud tedy posledni radek zmenite na:
done 2>&1 | cat
(nebo jakekoli jine zpracovani vystupu podprikazu), prejde se dal teprve pote,
co se programu cat preda vsechno.
Upozornuju, ze data z paralelnich prikazu muzou prijit v jakemkoli poradi.
Je to supr. Shellove skripty mi ted muzou spoustet programy na pozadi
paralelne (coz znatelne zrychli napriklad podprogramy cekajici na sit, napr.
ping nebo ssh/scp) a zaroven se do prikazove radky vrati skutecne az kdyz je
vsechno hotovo.
T.
|