&
나는 명령 시퀀스 끝에 있는 앰퍼샌드가 백그라운드에서 실행되고("병렬"), ;
세미콜론이 시퀀스("시리즈")를 허용하고, 괄호가 백그라운드에서 실행된다는 것을 이해합니다.명령 그룹화.
몇 가지 명령이 포함된 파일이 있다고 가정해 보겠습니다 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