¿Es "wait &" ("wait ampersand") una expresión o técnica útil (bash) shell / shell script?

12

He "heredado" algunos scripts de shell para máquinas Linux que ejecutan el shell "bash" de GNU. En un caso particular, la máquina ejecuta GNU bash versión 2.0.5b

Uno de esos scripts tiene una wait &instrucción ("wait ampersand") como parte de la "línea" de un forbucle. A primera vista, parece ser un idioma curioso / interesante, pero mis búsquedas en la web no arrojaron nada relevante. man waitmuestra la página de manual "BASH_BUILTINS" ("BASH BUILTINS COMMAND"), que tiene la siguiente descripción:

wait [n]  
  Wait for the specified process and return its termination status.
  n may be a process ID or a job spec­ification;  if  a  job spec is given,
  all processes in that job's pipeline are waited for.  If n is not
  given, all currently active child processes are waited for, and the 
  return status is zero. If n speci­fies a non-existent process or job, 
  the return status is 127.  Otherwise, the return status is the exit 
  status of the last process or job waited for.

Al leer esa parte de esta página de manual, me parece que wait &silenciosamente (en segundo plano) se asegura de que "se esperen todos los procesos secundarios actualmente activos y que el estado de retorno sea cero ". ¿Estoy en lo cierto en esta interpretación? ¿Es este un idioma común y / o útil?

Para un contexto agregado, estoy hablando del siguiente tipo de uso en el script:

for file in `ls *.txt ; wait &`
do
   ...
   [cp instructions]
   ...
   [mv instructions]
   ...
   [mailx instruction]
done
ricmarques
fuente

Respuestas:

14

No puedo imaginar ninguna razón para escribir este código, y no estoy muy seguro de lo que la persona que escribió este código estaba tratando de lograr. waitaquí no hace nada - desde su perspectiva, no son no hay procesos secundarios, por lo que sólo se cerrará inmediatamente y básicamente actuar como NOOP ( waitsí ejecuta en un proceso hijo debido a la sustitución de comandos, pero eso es no relacionado).

Como comentario aparte, analizar la salida de ls es bastante frágil . En cambio, considere hacer esto:

for file in *.txt; do
    ...
done
Chris Down
fuente