Цикл фонової роботи


81

Я намагаюся запустити фонове завдання в циклі for у bash:

for i in $(seq 3); do echo $i ; sleep 2 & ; done

Я отримую помилку:

bash: syntax error near unexpected token `;'

У zsh працює командний рядок.


3
Який біт ви намагаєтесь розмістити у фоновому режимі? як це читає, ви намагаєтеся заснути у фоновому режимі, що було б безглуздо ..
BugFinder

4
sleep - це лише перевірка мого циклу до реального випадку.
bougui

Відповіді:


124

Видаліть; після сну

for i in $(seq 3); do echo $i ; sleep 2 & done

До речі, такі цикли краще писати окремими рядками з належним відступом (якщо ви пишете це у файлі сценарію оболонки).

for i in $(seq 3)
do
   echo $i
   sleep 2 &
done

4
Майте на увазі, що функція "sleep 2" надішле лише на задній план.
tamerlaha

Чому саме тоді, коли я це роблю за $iдопомогою команди у фоновому режимі, робота завдання говорить, що назва процесу містить $iзамість того, яке фактичне значення $iбуло?
Майкл

@Michael Повна програма з виходом допомогла б зрозуміти краще
gammay

for I in <whatever>; do rm -fr $I & done... jobs-> rm -fr $Iкілька разів, замість того, щоб фактичне папку було видалено для кожного завдання
Майкл

У мене є відповідь на це, вона довга. Тому я думаю, що ви повинні опублікувати це як нове запитання (і додати посилання на це питання тут), я відповім, і ви також отримаєте більше відповідей.
gammay

42

Ви можете помістити фонову команду в ()

for i in $(seq 3); do echo $i ; (sleep 2 &) ; done

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