참고 : mobrule이 지적한 것처럼, 인수가없는 대기 호출은 모든 자식이 완료 될 때까지 기다리기 때문에 원래 응답이 작동하지 않습니다. 따라서 더 자식 프로세스의 비용으로 폴링을 방지 다음 'parallelexec'스크립트 :
#!/bin/bash
N="$1"
I=0
{
if [[ "$#" -le 1 ]]; then
cat
else
while [[ "$#" -gt 1 ]]; do
echo "$2"
set -- "$1" "${@:3}"
done
fi
} | {
d=$(mktemp -d /tmp/fifo.XXXXXXXX)
mkfifo "$d"/fifo
exec 3<>"$d"/fifo
rm -rf "$d"
while [[ "$I" -lt "$N" ]] && read C; do
($C; echo >&3) &
let I++
done
while read C; do
read -u 3
($C; echo >&3) &
done
}
첫 번째 인수는 병렬 작업의 수입니다. 더 많은 것이 있다면, 각각 하나의 작업으로 실행됩니다. 그렇지 않으면 실행할 모든 명령이 stdin에서 한 줄씩 읽 힙니다.
필자는 동기화 방법으로 명명 된 파이프 (쉘이 열리 자마자 망각으로 전송 됨)를 사용합니다. 단일 바이트 만 쓰여지기 때문에 상황을 복잡하게 만들 수있는 경쟁 조건 문제가 없습니다.
당신이 어떤 순서에 따라 다음 스크립트를 실행해야합니까? – ajreal
@ajreal, 아니요 특정 주문이 필요하지 않습니다. 그들은 서로 독립적입니다. –