백그라운드에서 동일한 명령을 여러 번 실행

백그라운드에서 동일한 명령을 여러 번 실행

bash를 사용하여 여러 명령을 실행하고 백그라운드에서 실행하는 방법은 무엇입니까?

예를 들어:

$ for i in {1..10}; do wait file$i &; done

여기서 wait는 사용자 정의 바이너리입니다.

이제 오류가 발생합니다.

syntax error near unexpected token `;'

위의 명령을 실행할 때.

백그라운드에서 명령은 병렬로 실행되어야 합니다.

답변1

&, ;같은목록 종결자운영자. 이들은 동일한 구문을 가지며 (원하는 작업에 따라) 서로 바꿔서 사용할 수 있습니다. 이는 당신이 원하거나 필요로 하는 것이 아니라 command1 &; command2단지 필요하다는 것을 의미합니다 command1 & command2.

따라서 귀하의 예에서는 다음과 같이 작성할 수 있습니다.

for i in {1..10}; do wait file$i & done

wait명령은 백그라운드에서 시작되고 루프는 즉시 다음 명령으로 이동합니다.

답변2

호환성을 위해 확장 대신 posix 형식을 사용하세요.

for i in $(seq 1 10); do (./wait file$i &); done

답변3

명령을 그룹화하고 그룹화된 명령을 백그라운드에 배치할 수 있습니다. 좋다:

$ for i in {1..10}; do ((wait file$i)&); done

답변4

바이너리에 실제로 이름이 있습니까 wait? 이 작업은 wait쉘에 내장되어 있으므로 권장하지 않습니다 .

나는 bash가 백그라운드 프로세스를 잘 시작하는 단일 라인 루프를 구문 분석하지 않는다고 생각합니다. 코드를 다음과 같이 변경하는 것이 좋습니다.

$ for i in {1..10}; do ./wait file$i & echo "Running 'wait' using PID=$!..."; done

관련 정보