인수로 제공된 명령이 스크립트 내의 루프에서 실행되지 않는 이유는 무엇입니까?

인수로 제공된 명령이 스크립트 내의 루프에서 실행되지 않는 이유는 무엇입니까?

매분마다 명령을 실행하는 간단한 스크립트를 만들었습니다.

#!/usr/bin/env sh

while true; do
    exec "$@"
    sleep 60
done

아이디어는 그것을 만드는 것입니다도커 진입점이를 통해 Laravel 스케줄러를 실행할 수 있습니다. 하지만 이미지를 구축하기 전에 테스트하고 싶습니다.

$ ./entrypoint/entrypoint_cron.sh echo "Hello"
Hello

그러나 명령은 한 번만 실행됩니다. 왜? 인수에 제공된 명령이 Ctrl+로 종료될 때까지 연속 루프에서 실행되도록 하려면 어떻게 해야 합니까 C?

답변1

exec명령은 현재 프로세스를 새 프로세스로 바꿉니다. 성공적인 실행은 스크립트 실행을 계속할 것이 없음을 의미합니다.

POSIX(에 대한 문서 sh, 참조 man sh)는 다음을 작성합니다.이와 같이,

command로 지정 하면 exec새 프로세스를 생성하지 않고 쉘이 command로 대체됩니다. 인수가 지정된 경우 명령에 대한 인수여야 합니다.

어쩌면 당신은 이것을 의미합니까?

#!/bin/sh
while true
do
    "$@"
    sleep 60
done

관련 정보