É “wait &” (“wait ampersand”) um idioma ou técnica de script shell / shell útil (bash)?

11

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

Um desses scripts tem uma instrução wait & ("wait ampersand") como parte da "linha" de um loop for . À primeira vista, esse parece ser um idioma curioso / interessante, mas minhas buscas na web não retornaram nada relevante. man wait mostra a página de manual "BASH_BUILTINS" ("BASH_BUILTINS COMMAND"), que tem 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 da manpage, parece-me que wait & está silenciosamente (em segundo plano) certificando-se de que " todos os processos-filhos ativos no momento estão aguardando e o status de retorno é zero ". Estou certo nessa interpretação? Este é um idioma comum e / ou útil?

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

for file in 'ls *.txt ; wait &'
do
   ...
   [cp instructions]
   ...
   [mv instructions]
   ...
   [mailx instruction]
done
    
por ricmarques 15.10.2015 / 17:38

1 resposta

14

Não consigo imaginar nenhum motivo para escrever esse código, e não sei ao certo o que a pessoa que escreveu esse código estava tentando alcançar. wait aqui não faz nada - a partir de sua perspectiva, não há nenhum processo filho, então ele irá simplesmente sair imediatamente e basicamente agir como noop ( wait se executa em um processo filho devido ao comando substituição, mas isso não é relacionado).

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

for file in *.txt; do
    ...
done
    
por 15.10.2015 / 17:42