exec < 파일 이름 - 이것은 무엇을 하는가?

exec < 파일 이름 - 이것은 무엇을 하는가?

다음 코드 조각(sh)을 찾았습니다.

    TESTFILE=$TEST_PATH/test.out
    if [ -f $TESTFILE ]
    then
        exec < $TESTFILE
    else
        echo "$TEST_PATH: no test.out file"
    fi

내 질문의 요점은 이 줄이 무엇을 하고 있는지입니다. (나머지는 이해해요!)

        exec < $TESTFILE

파일은 실행 가능하지 않으며 다른 프로세스를 호출하지도 않으며 exec가 일반 텍스트 파일에 대해 수행하는 작업을 찾지 못했습니다.

답변1

직관적인 이해를 위해 다음 패턴을 관찰하는 것이 도움이 될 수 있습니다.

cmd                  # fork; execute cmd in child
cmd < /dev/null      # fork; redirect stdin and execute cmd in child
exec cmd             # execute cmd; no fork
exec cmd < /dev/null # redirect stdin and execute cmd; no fork
exec < /dev/null     # redirect stdin; no fork and no execution

보시다시피 exec이것은 전혀 문제가 아닙니다. 이것은 반대입니다. "실행"을 의미하는 것은 전혀 아닙니다. 이는 "끝을 나누지 마십시오"를 의미합니다. 현재 프로세스 내에서 명령 리디렉션 및/또는 명령 실행이 발생합니다.

답변2

POSIX 설명에서exec:

exec - 명령을 실행하고 파일 설명자를 열거나 닫거나 복사합니다.

이 경우에는 명령어가 없으므로 파일 디스크립터만 수정됩니다. 일반적으로 명령줄에 작성하는 리디렉션은 해당 줄의 명령에 영향을 미칩니다. exec현재 실행 중인 쉘을 리디렉션하는 방법입니다.

관련 정보