"Wait &" ("wait ampersand") è un utile linguaggio (o bash) di shell / shell idioma o tecnica?


12

Ho "ereditato" alcuni script di shell per macchine Linux che eseguono la shell "bash" GNU. In un caso particolare, la macchina esegue GNU bash versione 2.0.5b

Uno di questi script ha wait &un'istruzione ("wait ampersand") come parte del "for line" di un forloop. A prima vista, sembra un linguaggio curioso / interessante, ma la mia ricerca sul web non ha restituito nulla di rilevante. man waitmostra la manpage "BASH_BUILTINS" ("BASH BUILTINS COMMAND"), che ha la seguente descrizione:

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.

Leggendo quella parte di questa pagina man, mi sembra che in wait &silenzio (in background) si assicuri che " tutti i processi figlio attualmente attivi sono attesi e lo stato di ritorno è zero ". Ho ragione in questa interpretazione? È un linguaggio comune e / o utile?

Per un contesto aggiuntivo, sto parlando del seguente tipo di utilizzo nello script:

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

Risposte:


14

Non riesco a immaginare alcun motivo per scrivere questo codice e non sono del tutto sicuro di ciò che la persona che ha scritto questo codice stava cercando di ottenere. waitqui non fa nulla - dal suo punto di vista, non ci sono processi figlio, quindi uscirà immediatamente e sostanzialmente agirà come un noop ( waitsi esegue da solo in un processo figlio a causa della sostituzione dei comandi, ma non è correlato).

A parte questo, analizzare l'output di ls è piuttosto fragile . Invece, considera solo questo:

for file in *.txt; do
    ...
done
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.