获取环境变量的最新值是bash shell脚本

获取环境变量的最新值是bash shell脚本

我想知道如何在 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 不可见。xxtemp.sh

(严格来说,root可能会改变正在运行的进程的环境,但这超出了本答案的范围。)

相关内容