Ist "wait &" ("wait ampersand") eine nützliche (bash) Shell / Shell-Skript-Sprache oder -Technik?

12

Ich habe einige Shell-Skripte für Linux-Computer "geerbt", auf denen die GNU-Shell "bash" ausgeführt wird. In einem bestimmten Fall führt der Computer die GNU-Bash-Version 2.0.5b aus

Eines dieser Skripte enthält eine wait &Anweisung ("kaufmännisches Und") als Teil der "for-Zeile" einer forSchleife. Auf den ersten Blick scheint das eine merkwürdige / interessante Redewendung zu sein, aber meine Websuche danach hat nichts Relevantes ergeben. man waitzeigt die Manpage "BASH_BUILTINS" ("BASH BUILTINS COMMAND") mit der folgenden Beschreibung:

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.

Wenn ich diesen Teil dieser Manpage lese, scheint es mir wait &stillschweigend (im Hintergrund), sicherzustellen, dass "auf alle derzeit aktiven untergeordneten Prozesse gewartet wird und der Rückgabestatus Null ist ". Habe ich recht mit dieser Interpretation? Ist dies eine verbreitete und / oder nützliche Redewendung?

Für zusätzlichen Kontext spreche ich über die folgende Art der Verwendung im Skript:

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

Antworten:

14

Ich kann mir keinen Grund vorstellen, diesen Code zu schreiben, und ich bin mir nicht ganz sicher, was die Person, die diesen Code geschrieben hat, erreichen wollte. waithier tut nichts - aus seiner Sicht gibt es keine untergeordneten Prozesse, so dass es einfach sofort beendet wird und im Grunde genommen als Noop fungiert ( waitselbst wird in einem untergeordneten Prozess aufgrund der Befehlssubstitution ausgeführt, aber das hat nichts damit zu tun ).

Abgesehen davon ist das Parsen der Ausgabe von ls ziemlich fragil . Ziehen Sie stattdessen Folgendes in Betracht:

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