나는 다음과 같은 쉘 스크립트를 작성했습니다 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.sh
testmain.sh
process.sh
process.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
이는 환경 변수가 상속되는 동안(일반적으로 명령을 실행할 때와 마찬가지로) 내보내지 않은 변수가 환경에 추가되지 않기 때문입니다 .