쉘 스크립트 명령을 순차적으로 실행

쉘 스크립트 명령을 순차적으로 실행

내 스크립트(.ksh):

cmd1 & cmd2

cmd1백그라운드에서 실행하고 cmd2시작 후에만 실행을 시작하고 싶습니다 . cmd1그러나 스크립트를 실행하면 cmd2이전에 시작되어 cmd1문제가 발생합니다.

이 문제를 어떻게 해결할 수 있나요?

답변1

조건부 연산자를 사용하면 &&다른 실행이 시작되기 전에 하나의 실행이 "완료"되도록 강제할 수 있습니다. ("완료"는 실제로 프로세스를 백그라운드로 보내기 때문에 "완료"를 따옴표로 묶었습니다.)

하지만

$ (echo "foo" &) ; echo "bar"

출력될 수도 있다

bar
foo

다음과 같은

$ (echo "foo" &) && echo "bar"

출력됩니다

foo
bar

왜냐하면 쉘은 두 번째 명령을 실행하기 전에 첫 번째 명령의 종료 상태를 결정해야 하기 때문입니다.

답변2

가장 간단한 해결책은 작은 것을 추가하는 것입니다 sleep.

cmd1 & sleep 1 && cmd2

더 안정적인 방법은 래퍼를 사용하여 실제로 실행되고 계속되는지 cmd2확인하는 것 입니다.cmd1

그것은 다음과 같습니다:

while ! pgrep cmd1; do
    sleep 1
done
cmd2

while !BTW로 교체할 수 있습니다 until.

관련 정보