2011-04-19 14 views
14

Me preguntaba por qué bloque de código se utilizó en este ejemplo a continuación:Código Uso del bloque {} en bash

possibly_hanging_job & { sleep ${TIMEOUT}; eval 'kill -9 $!' &> /dev/null; } 

Esto podría haber sido escrito como esto (sin utilizar bloque de código también) ..right?

possibly_hanging_job & 
sleep ${TIMEOUT} 
eval 'kill -9 $!' &> /dev/null 

Respuesta

19

Al poner los dos últimos comandos entre llaves, queda claro que "No son solo dos comandos adicionales que suceden para ejecutar después del proceso de larga ejecución que podría bloquearse; Son, en cambio, parte integral de conseguir que se cierre correctamente antes de proceder con el resto de la secuencia de comandos shell “Si el autor en su lugar había escrito:.

command & 
a 
b 
c 

no sería del todo claro que a y b son sólo parte de obtener command para finalizar correctamente. Al escribir así:

command & {a; b} 
c 

el autor hace que sea más claro que a y b existen en aras de conseguir command completamente terminado y limpiado antes de que el siguiente paso real, c, ocurre.

0

Sí, no veo ningún motivo para que las llaves aparezcan aquí.

2

En realidad, incluso me pregunto por qué hay un eval. Por lo que veo, también debería funcionar sin eso.

Acerca de su pregunta real: Supongo que el bloque de código está ahí para enfatizar que el sleep pertenece a kill. Pero no es necesario. También debería funcionar así:

possibly_hanging_job & sleep ${TIMEOUT}; kill -9 $! &> /dev/null 
Cuestiones relacionadas