Як написати цикл for, який виконує асинхронну команду в кожній ітерації?


23

Цікаво, чому виникає помилка використання асинхронної команди в циклі?

$ for i in {1..8}; do sleep 100 & ; done
bash: syntax error near unexpected token `;'

Якщо я напишу як

$ for i in {1..8}; do 
> sleep 100 & 
> done

це прекрасно працює.

Як я можу записати його в один рядок без помилок?

Відповіді:


39

Відкиньте ;:

for i in {1..8}; do sleep 100 & done

&Команди відокремлюють , тож ;сторонні (і оболонка очікує чогось між &і ;).


Спасибі. "оболонка очікує чогось між & і;", то чому б не було порожньої команди між & і;?
Тім

5
Справжня команда без операції:
HTNW

1
@StephenKitt, розділ, на який ви посилаєтесь, також зазначає: "В інтерактивному сеансі або скрипті з іншими командами, додаткові символи <newline> або <semicolon> ... не кваліфікуються як порожня команда, описана тут, тому що їх будуть споживати інші частини граматики ». Гмммм ...
Wildcard

1
@ Цікаво, що цікаво, я не замислювався над наслідками цього речення, коли досліджував відповідь на наступні дії Тіма. Увімкнення POSIX-режиму Баша не змінює його поведінку в цьому плані. Гммм справді ...
Стівен Кітт

2
@Wildcard: echo foo ; ; echo barв базі 4,4 каже syntax error near unexpected token `;'. dashдає аналогічну помилку. У цьому випадку це порожня команда, оскільки жодна інша частина граматики не споживає її. Я думаю, що вони можуть говорити про зайве ;в кінці рядка типу sleep 100;(новий рядок).
Пітер Кордес

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