【问题标题】:Preserve environments vars after shell script finishes在 shell 脚本完成后保留环境变量
【发布时间】:2013-01-22 10:27:14
【问题描述】:

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

【问题讨论】:

  • 将它们添加到文件~/.bash_profile。
  • @CongXu export 将变量向下传递给子代,而不是父代。
  • 你为什么要问?为什么要保留这些环境变量?你真的关心保留所有这些吗?为什么保留例如WINDOWID 或 SSH_AGENT_PID 对你很重要吗?
  • 你也可以让你的脚本成为在你的$HOME/.bashrc中定义的bash function

标签: linux shell scripting environment-variables


【解决方案1】:

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

为了保留脚本中可能存在的exports,请调用它

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

注意. 和myScript.sh 之间的空格;还要注意“source is a synonym for . in Bash, but not in POSIX sh, so for maximum compatibility use the period.”

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      按如下方式运行脚本:

      source <script>
      
      -OR-
      
      . <script>
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-16
        • 2015-09-16
        • 2013-09-04
        • 1970-01-01
        • 1970-01-01
        • 2010-11-30
        • 2013-02-06
        • 1970-01-01
        相关资源
        最近更新 更多