“Wait &” (“wait e comercial”) é uma linguagem ou técnica útil (bash) para shell / shell script?

12

Eu "herdei" alguns scripts de shell para máquinas Linux executando o shell "bash" do GNU. Em um caso específico, a máquina executa o GNU bash versão 2.0.5b

Um desses scripts possui uma wait &instrução ("e comercial de espera") como parte da linha "for" de um forloop. À primeira vista, isso parece ser um idioma curioso / interessante, mas minha pesquisa na web não retornou nada relevante. man waitmostra a página do manual "BASH_BUILTINS" ("BASH BUILTINS COMMAND"), que possui a seguinte descrição:

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.

Ao ler essa parte desta página de manual, parece-me wait &silenciosamente (em segundo plano) garantir que " todos os processos filhos ativos no momento sejam aguardados e o status de retorno seja zero ". Estou certo nessa interpretação? Esse é um idioma comum e / ou útil?

Para um contexto adicional, estou falando sobre o seguinte tipo de uso no script:

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

Respostas:

14

Não consigo imaginar nenhuma razão para escrever esse código, e não tenho muita certeza do que a pessoa que escreveu esse código estava tentando alcançar. waitaqui não faz nada - a partir de sua perspectiva, não são nenhum processo filho, por isso só vai sair imediatamente e, basicamente, agir como um noop ( wait-se executa em um processo filho, devido à substituição de comando, mas isso é não relacionada).

Como um aparte, analisar a saída de ls é bastante frágil . Em vez disso, considere apenas fazer o seguinte:

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