명령 그룹화

명령 그룹화

&명령 시퀀스 끝에 있는 앰퍼샌드는 백그라운드("병렬")에서 명령을 실행하고 세미콜론은 ;순차적("시리즈")을 허용하며 괄호는 이를 허용한다는 것을 이해합니다.명령 그룹화.

몇 가지 명령이 포함된 파일이 있다고 가정합니다 bash.

#!/bin/bash
cmd1
cmd2
cmd3
cmd4

예를 들어 명령 그룹화를 적용하려면 처음 두 개를 병렬로 실행하고 잠시 기다린 후 다음 두 개를 병렬로 실행해야 합니다.

#!/bin/bash
( \
cmd1 &
cmd2 &
); \
( \
cmd3 &
cmd4 & 
)

아니면 한 줄에 모든 것이 필수여야 합니까?

#!/bin/bash
(cmd1 & cmd2 &);(cmd3 & cmd4 &)

아니면 어디에서나 계속 줄 문자를 사용합니까?

#!/bin/bash
( \
cmd1 & \
cmd2 &); \
( \
cmd3 & \
cmd4 & )

답변1

간단히 사용 &하고wait

cmd1 &
cmd2 &
wait
cmd3 &
cmd4 &
wait

wait는 백그룹 프로세스를 기다립니다.

(줄 연속의 경우 및 를 사용하세요 ). 이는 리디렉션이 있는 경우에만 유용합니다.

(
cmd1 &
cmd2 &
wait
) > some-log.A
(
cmd3 &
cmd4 &
wait
) > some-log.B

가 없으면 wait서브쉘이 즉시 반환됩니다.

date ; (
> sleep 20 &
> sleep 10 &
> ) ; date
Wed Nov 29 16:08:15 CET 2017
Wed Nov 29 16:08:15 CET 2017

비교하다

date ; (
> sleep 20 &
> sleep 10 &
> wait
> ) ; date
Wed Nov 29 16:10:08 CET 2017
Wed Nov 29 16:10:28 CET 2017

관련 정보