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