Bash 쉘 스크립트에서 환경 변수의 최신 값을 얻는 방법을 알고 싶습니다. 내가 겪고 있는 문제는 외부에서 여러 번 변경될 수 있는 환경 변수가 있다는 것입니다. 하지만 쉘 스크립트에서 이 변수를 사용하면 시작 중에 항상 값이 표시됩니다. 예를 들어, 쉘 스크립트를 작성했는데 환경 변수 x가 10입니다.
echo $x #Here this prints 10
sleep 20 #here during the sleep I am changing the value to 5
echo $x #Here even after value is changed to 5 , it prints 10.
실제 실행은 다음과 같습니다.
# ./temp.sh &
[1] 915
# 10
# export x=5
# 10
[1]+ Done ./temp.sh
#
답변1
환경 변수는 이와 같은 작업을 수행하기 위한 것이 아닙니다. 스크립트는 일단 실행되면 환경을 복사본으로 상속합니다. 그런 다음 두 환경은 독립적입니다.
프로세스 간 통신 방법을 찾아야 할 수도 있습니다. 정말로 변수를 통해 이 작업을 수행해야 한다면 다음을 확인하세요.이것;비록 이는 일반적인 사용에서 실행 중인 프로세스와 통신하는 올바른 방법은 아니지만.
답변2
환경 변수는 각 프로세스마다 다릅니다. 프로세스가 시작되면 환경의 복사본(시작한 프로세스에 의해 구축됨)을 가져오고 일단 시작된 후에는 다른 프로세스가 해당 복사본을 건드릴 수 없습니다.
귀하의 예에서 값을 변경하면 x
실행 중인 셸 내에서 변경됩니다. 변수를 내보내면 나중에 쉘이 시작되는 프로세스 환경에 해당 변수를 복사하도록 쉘에 알릴 수 있지만 이미 시작된 프로세스의 변수 값에는 영향을 미치지 않습니다. 따라서 실행 중인 자체 셸이 있어 temp.sh
시작 시 값을 선택하지만 사용하는 대화형 셸에서 수행된 후속 변경 사항은 실행 중인 셸에 표시되지 않습니다.x
x
temp.sh
(엄밀히 말하면 root
실행 중인 프로세스의 환경을 변경하는 것이 가능하지만 이는 이 답변의 범위를 벗어납니다.)