我想知道如何在 bash shell 脚本中获取环境变量的最新值。我遇到的问题是,我有一个可以在外部多次更改的环境变量。但是当我在 shell 脚本中使用该变量时,它始终显示启动期间的值。例如我写了一个shell脚本,有一个环境变量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
,您是在正在运行的 shell 中执行此操作。通过导出变量,您可以告诉 shell 您希望将它们复制到 shell 随后启动的进程的环境中,但这不会影响已启动的进程中的变量值。因此,它有自己的 shell 运行它,在启动时temp.sh
获取 的值,但在您使用的交互式 shell 中进行的后续更改对于运行的 shell 不可见。x
x
temp.sh
(严格来说,root
可能会改变正在运行的进程的环境,但这超出了本答案的范围。)