test.sh 파일에 반복 스크립트가 있고 백그라운드 프로세스가 완료된 후 "running_script2.sh" 스크립트를 실행하려고 하는데 이 작업을 시도했지만 작동하지 않습니다.
for id in 1 2 3
do
bash running_script1.sh $id & (#complete 1 minute/looping)
done
wait
echo "running script2 ..."
bash running_script2.sh
근무 시간:
bash running_script1.sh 1 &
bash running_script1.sh 2 &
bash running_script1.sh 3 &
wait
echo "running script2 ..."
bash running_script2.sh
하지만 효율적이지 않음
답변1
사이에는 의미상 차이가 없습니다.
for id in 1 2 3
do
bash running_script1.sh $id & (#complete 1 minute/looping)
done
그리고
bash running_script1.sh 1 &
bash running_script1.sh 2 &
bash running_script1.sh 3 &
wait
echo "running script2 ..."
bash running_script2.sh
time
아래 데모 스크립트는 조건부 명령에 관계없이 3초 남짓 동안 실행됩니다(가능함 true
) .false
#!/bin/sh -eu
for i in 1 2 3; do
echo "sleep $i" > $i && chmod +x $i
done
if false; then
for i in 1 2 3; do
bash ./$i &
done
else
bash ./1 &
bash ./2 &
bash ./3 &
fi
wait
여전히 차이점이 있는 경우 게시해 주세요.맥웨이.
답변2
이것이 올바른 방법인지는 모르겠지만 screen을 사용하여 스크립트를 실행합니다.
screen은 bg에서 프로세스를 실행하는 가상 터미널입니다.
for id in 1 2 3
do
screen -d -m bash script1.sh $id
done
wait
echo "running script2 ..."
bash script2.sh
screen -d -m은 스크립트를 실행하고 스크립트가 완료되면 화면을 닫습니다.
screen을 사용할 때 script1의 출력을 표준 출력으로 가져올 수 없으므로 파일을 사용하여 script1의 출력을 저장합니다.