5까지 계산하고 완료되면 "완료"를 에코하는 while 루프가 있습니다. "&"를 사용하여 백그라운드에서 스크립트를 실행하고 실행 중에 계속 명령을 실행할 수 있기를 원합니다.
하지만 완료되면 "완료" 메시지가 표시되기 전에 자체적으로 포그라운드 프로세스가 되기를 원합니다. 그 후에는 새로운 명령 프롬프트 줄을 표시하고 싶습니다. "\nDone"을 에코할 수 있으며 백그라운드에서 실행하면 새 프롬프트를 종료/시작하는 대신 출력만 인쇄하는 이유를 이해합니다. 하지만 기본적으로 "병합 작업"이 끝나기 전에 다시 합치는 것이 가능한지, 스크립트에 내장된 작업 제어를 사용하여 다른 곳에 적용할 수 있는지 궁금합니다.
이것은 실용적인 질문이 아니라 단지 호기심일 뿐입니다.
i=0
while [ $i -lt 5 ]
do
let i+=1
sleep 1
done
fg
echo "Done"
답변1
아니요 - 실행 중인 프로세스는 셸에 의해 백그라운드로 처리되므로 이러한 작업을 수행할 수 없으며 어떤 프로세스가 포그라운드/백그라운드/일시 중지되었는지 결정하는 것이 셸의 작업입니다.
이것을 시도해 보십시오 - delete를 fg
한 다음 백그라운드에서 쉘 스크립트를 실행하십시오(즉, &끝에 a를 사용하십시오). 완료되면 출력이 콘솔에 흐리게 표시됩니다.