쉘 스크립트 – 새 스크립트는 `exec` 이후 상위 스크립트로부터 값을 상속받지 않습니다.

쉘 스크립트 – 새 스크립트는 `exec` 이후 상위 스크립트로부터 값을 상속받지 않습니다.

나는 다음과 같은 쉘 스크립트를 작성했습니다 testmain.sh.

username="ravi"
echo "The main ProcessId: "
echo $$
exec ./process.sh

그리고 process.sh는:

echo "In subprocess the process ID is:"
echo $$
echo $username

으로 실행하고 있습니다 ./testmain.sh.

메인 프로세스( )와 하위 프로세스( )가 동일한 프로세스 ID를 공유하기 때문에 "ravi" $username가 인쇄되어야 한다고 예상했습니다 . 그러나 .process.shtestmain.shprocess.shprocess.sh

쉘이 왜 이렇게 동작합니까? 내가 뭘 잘못했나요?

답변1

exec외부 명령( d 명령 포함)의 환경에 변수를 전달하려면 변수를 내보내야 합니다. 그렇지 않으면 source스크립트를 읽어야 합니다 .

따라서 다음 중 하나를 수행하십시오.

export username="ravi"
echo "The main ProcessId: "
echo $$
exec ./process.sh

또는:

username="ravi"
echo "The main ProcessId: "
echo $$
. ./process.sh  # source the script

exec이는 환경 변수가 상속되는 동안(일반적으로 명령을 실행할 때와 마찬가지로) 내보내지 않은 변수가 환경에 추가되지 않기 때문입니다 .

관련 정보