루프 백그라운드 작업


81

bash의 for 루프에서 백그라운드 작업을 실행하려고합니다.

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

오류가 발생합니다.

bash: syntax error near unexpected token `;'

zsh에서는 명령 줄이 작동합니다.


3
어떤 비트를 백그라운드에 배치하려고합니까? 그건 당신이 .. 무의미 백그라운드에서 잠을하려는 읽는
BugFinder

4
수면은 실제 사례 전에 내 루프를 테스트하는 것입니다.
bougui

답변:


124

제거; 수면 후

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

BTW, 이러한 루프는 적절한 들여 쓰기를 사용하여 별도의 줄에 작성하는 것이 좋습니다 (쉘 스크립트 파일에 작성하는 경우).

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

4
"sleep 2"는 백그라운드로만 전송됩니다.
tamerlaha 2011 년

$i백그라운드 명령 에서이 작업을 수행 할 때 작업 제어 $i에서의 실제 값 대신 프로세스 이름에 포함 된 것으로 표시되는 이유는 무엇 $i입니까?
Michael

출력 @Michael 전체 프로그램을 더 잘 이해하는 데 도움이 될 것이다
gammay

for I in <whatever>; do rm -fr $I & done...- jobs> rm -fr $I각 작업에 대해 실제 디렉토리가 삭제되는 대신 여러 번
Michael

나는 이것에 대한 대답을 가지고 있습니다. 그래서 나는 당신이 그것을 새로운 질문으로 게시해야한다고 생각합니다 (그리고 여기에 그 질문 링크를 추가하십시오), 내가 대답하고 당신은 또한 더 많은 응답을 얻을 것입니다.
gammay

42

백그라운드 명령을 ()에 넣을 수 있습니다.

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

10
주의하십시오 : 당신은 그것에 의해 서브 쉘을 생성합니다. 또한 wait백그라운드 작업을 종료 할 수 없음을 의미합니다 .
JFK
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.