스크립트에서 작업을 전면으로 가져오는 방법은 무엇입니까?

스크립트에서 작업을 전면으로 가져오는 방법은 무엇입니까?

테스트를 시작한 다음 잠시 기다렸다가 쉘 스크립트를 사용하여 프로그램을 시작하고 싶습니다.

#!/bin/bash
sleep 3 &  # test
sleep 1    # wait some
sleep 4 &  # run program under test
fg 1       # <-- I want to put test back in "foreground", but yields "line 5: fg: no job control"

"전경"이 무엇을 의미하는지 오해한 것 같은데, 제가 원하는 대로 할 수 있는 다른 방법이 있나요? ( jobs -xand를 접두사로 사용해 보았지만 nohup오해가 더 깊어지는 것 같습니다.)

답변1

셸에서 작업 제어를 활성화하면 됩니다.set -m

#!/bin/bash
set -m
sleep 3 &  # test
sleep 1    # wait some
sleep 4 &  # run program under test
jobs
fg %1

bash 매뉴얼을 인용하면 다음과 같습니다.

-중

모니터 모드. 작업 제어가 활성화되었습니다. 이 옵션은 이를 지원하는 시스템의 대화형 셸에 대해 기본적으로 활성화되어 있습니다(위의 작업 제어 참조). 백그라운드 프로세스는 별도의 프로세스 그룹에서 실행되며 완료되면 종료 상태가 포함된 줄을 인쇄합니다.

답변2

#!/bin/bash

sleep 3 & sleep_pid=$!
sleep 1
sleep 4 &
wait "$sleep_pid"

이를 전면에 놓는 것은 sleep 3완료될 때까지 기다리는 것과 같습니다. 나는 이것이 당신이하고 싶은 일이라고 가정합니다 (또는 적어도 이것은영향당신이 찾고 있는 것), 그것이 바로 위의 스크립트가 하는 일입니다. 작업의 PID를 변수에 저장한 sleep_pid다음 해당 값을 호출에 사용하여 이를 수행합니다 wait.

관련 정보