Чи "wait &" ("wait ampersand") є корисною (баш) ідіомою або технікою сценарію оболонки / оболонки?


12

Я "успадкував" декілька скриптів оболонки для машин Linux, на яких працює оболонка GNU "bash". В одному конкретному випадку машина працює з GNU bash версії 2.0.5b

Один із цих сценаріїв має wait &інструкцію ("wait ampersand") як частину forциклу "для рядка" . На перший погляд, це здається цікавою / цікавою ідіомою, але мої пошуки в Інтернеті не повернули нічого релевантного. man waitпоказує сторінку "BASH_BUILTINS" ("BASH BUILTINS COMMAND"), яка має такий опис:

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.

Читаючи цю частину цієї сторінки, мені здається, що wait &тихо (на задньому плані) переконуючись, що « всі очікувані в даний час дочірні процеси чекають, а статус повернення дорівнює нулю ». Я прав у цьому тлумаченні? Це загальна та / або корисна ідіома?

Для додаткового контексту я говорю про такий тип використання в сценарії:

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

Відповіді:


14

Я не уявляю жодної причини писати цей код, і я не зовсім впевнений, чого намагався досягти той, хто написав цей код. waitтут нічого не робить - з його точки зору, є НЕ немає дочірніх процесів, так що це буде просто вийти негайно , і в основному виступають в якості Нооп ( waitсама виконується в дочірньому процесі з - за підстановки команд, але це не пов'язано).

Як осторонь, аналіз виходу ls є досить крихким . Замість цього, подумайте просто так:

for file in *.txt; do
    ...
done
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.