16

在脚本完成运行后,如何保留从 shell 脚本设置的环境变量?

4

3 回答 3

20

通过运行脚本是不可能的。该脚本会生成它自己的子 shell,该子 shell 在脚本完成时会丢失。

为了保留export脚本中可能包含的 s,请调用它

  • 要么作为
    . myScript.sh
    
  • 或者
    source myScript.sh
    

.注意和之间的空格myScript.sh;另请注意,“在 Bashsource中是同义词.,但在 POSIX 中不是sh,因此为了最大程度的兼容性,请使用句点。

于 2013-02-07T02:32:16.967 回答
11

运行脚本如下:

source <script>

-OR-

. <script>

这将在当前 shell 中运行脚本,并在当前 shell 中定义变量。脚本完成后,变量将保留在当前 shell 中。

于 2013-02-07T03:30:20.823 回答
1

环境变量存在于每个进程私有的环境中。shell 将导出的变量的 COPY 作为其环境传递给它的子进程,但它们无法将环境传递回父进程或除子进程之外的任何进程。您可以打印这些变量并将它们加载到父级中。或者正如已经提到的,您可以使用“源脚本”或“.script”在当前 shell 中运行您的脚本(如果 . 不在您的 PATH 中,您可能需要 ./script)。一些工具打印它们的变量,shell 可以使用反引号来加载它们,例如ssh-agent. 这样,无论 ssh-agent 打印什么,都将作为命令运行。如果它打印出诸如“VAR1=VAL;VAR2=VAL2”之类的东西,可能会做你想做的事。

于 2013-02-07T05:12:31.607 回答