각 반복에서 비동기 명령을 실행하는 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

&명령을 분리 (가) 때문에, ;외부 (그리고 쉘 사이에 뭔가를 기대 &하고 ;).


감사. "쉘은 &와; 사이에 무언가를 기대한다."왜 &와; 사이에 비어있는 명령이 아닌가?
Tim

5
실제 no-op 명령은 다음과 같습니다.
HTNW

1
@StephenKitt, 당신이 참조하는 섹션은 또한 말합니다 : "다른 명령이있는 대화 형 세션이나 스크립트에서 여분의 <newline> 또는 <semicolon> 문자는 다른 명령에 의해 소비되기 때문에 여기에 설명 된 빈 명령으로 적합하지 않습니다 문법의 일부. " 흠 ...
와일드 카드

1
재미있는 @Wildcard, 나는 Tim의 후속 조치에 대한 답을 조사 할 때 그 문장의 결과를 생각하지 않았습니다. Bash의 POSIX 모드를 활성화해도 이와 관련하여 동작이 변경되지 않습니다. 흠 ..
Stephen Kitt

2
@Wildcard : echo foo ; ; echo barbash 4.4에서 말합니다 syntax error near unexpected token `;'. dash비슷한 오류가 발생합니다. 이 경우 문법의 다른 부분이 사용하지 않으므로 빈 명령입니다. 나는 그들이 (줄 바꿈) ;과 같은 줄 끝에 중복 에 대해 이야기하고 있다고 생각 sleep 100;합니다.
Peter Cordes

22

그룹은 당신의 do중괄호의 행동 :

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

배쉬뿐만 아니라 당신도 이해하기 쉽습니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.