![쉘 스크립트 종료](https://linux55.com/image/171636/%EC%89%98%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%20%EC%A2%85%EB%A3%8C.png)
두 개의 쉘 스크립트가 abc.sh
실행 def.sh
되고 abc.sh
return 문을 통해 def.sh
제어가 반환됩니다 .abc.sh
echo 명령과 종료 명령이 있지만 작동하지 않는 것 같습니다.
아래에서 다음을 볼 수 있습니다.abc.sh
sleep 60;
bash ./gen_files/def.sh ./gen_files/regress_rpt_1_0.txt
sleep 60;
bash ./gen_files/def.sh ./gen_files/regress_rpt_1_1.txt
sleep 10;
echo "COMPLETED **** EXITING NOW ****";
exit 0;
def.sh의 내용을 찾아주세요
#!/bin/bash
function build_status()
{
FILE=$1
if test -f "$FILE"; then
echo "$FILE File Exists"
if `grep -q "Build Job" $FILE`;then
echo "Build found,Continuing to next launch statement"
return
else
echo "Build Not Found,Waiting for the build"
sleep 120
build_status $FILE
fi
else
echo "$FILE Not Found"
#build_status $FILE
fi
}
FILE=$1
build_status $FILE
인쇄 후 스크립트를 종료하고 터미널로 돌아가기를 원합니다 COMPLETED **** EXITING NOW ****
. 그러나 지금 내가 보고 있는 것은 스크립트가 자체적으로 종료되지 않는다는 것입니다. 터미널에서 인쇄를 볼 수 있고 쉘 스크립트는 여전히 활동 없이 실행 중입니다.
답변1
abc.sh
백그라운드 작업으로 실행합니다 . 이는 스크립트가 백그라운드에서 실행되는 동안 스크립트의 출력(및 그에 따른 스크립트)이 def.sh
터미널에 인쇄된다는 의미입니다.abc.sh
스크립트가 완료되면 종료됩니다.
백그라운드에서 스크립트를 실행하고 이를 터미널에 출력한다는 사실은 스크립트를 시작한 직후 셸에서 인쇄한 프롬프트를 재정의한다는 의미입니다. 셸은 를 누를 때까지 새 프롬프트를 출력하지 않습니다 Enter.
해결책은 스크립트의 출력을 로그 파일에 기록하는 것입니다.
./abc.sh >abc.log 2>&1 &
(이렇게 하면 출력과 오류가 기록되고, abc.log
존재하지 않으면 생성되고, 존재하면 지워집니다.) 또는 백그라운드에서 스크립트를 실행하지 마세요.
./abc.sh