2011-05-08 23 views
10

Digamos que tengo una función fiesta¿Se puede invocar una función en una subshell bash como trabajo de fondo?

Yadda() { 
    # time-consuming processes that must take place sequentially 
    # the result will be appended >> $OUTFILE 
    # $OUTFILE is set by the main body of the script 
    # No manipulation of variables in the main body 
    # Only local-ly defined variables are manipulated 
} 

¿Se me permite invocar la función como un trabajo en segundo plano en un subnivel? P. ej .:

OUTFILE=~/result 
for PARM in $PARAMLIST; do 
    (Yadda $PARM) & 
done 
wait 
cat $OUTFILE 

¿Qué opinas?

+0

Pruébalo y mira? – eggyal

+0

@eggyal desafortunadamente, estoy en casa, y el servidor Linux está en la oficina: P – pepoluan

Respuesta

9

Puede invocar la función como un trabajo en segundo plano en una subcadena. Funcionará igual que usted escribió en su ejemplo.

Veo un problema en la forma en que lo demostró en su ejemplo. Si algunos de los procesos finalizan simultáneamente, intentarán escribir en el OUTFILE al mismo tiempo y la salida podría mezclarse.

Sugiero que cada proceso escriba en su propio archivo y luego recopile los archivos después de todos los procesos están hechos.

+0

¡gracias por el consejo adicional! marcó tu respuesta. – pepoluan

Cuestiones relacionadas