【问题标题】:How can I modify an environment variable across all running shells?如何在所有正在运行的 shell 中修改环境变量?
【发布时间】:2010-12-10 16:11:52
【问题描述】:

我使用 Terminal.app 和 iTerm,它们都支持通过多个选项卡和多个窗口同时运行多个 shell。我经常使用此功能,但因此,如果我想更改环境变量设置,我通常必须在我打开的每个选项卡和窗口以及任何新的选项卡或窗口中运行一次相同的命令我以后开。我的 shell 是否可以相互通信,以便我可以更改一次环境变量,并将该更改传播到我当前正在运行的所有其他 shell?

我知道我可以在像.bashrc 这样的启动文件中静态设置环境变量。我也知道我可以让子 shell 继承父 shell 的环境,通常或通过screen。这些选项都没有解决这个问题。这个问题专门针对同时动态更改多个当前运行的 shell 的环境。

理想情况下,我希望在不将这些变量的内容写入磁盘的情况下随时完成此操作。我希望能够做到这一点的原因之一是我可以在 env 变量中设置敏感信息,例如散列密码,并稍后在其他 shell 中引用它们。我希望能够在我登录时设置这些变量一次,并且能够在我所有的 shell 中引用它们,直到我注销,或者直到机器重新启动。 (这类似于ssh-agent 的工作方式,但据我所知,ssh-agent 只会存储 SSH 密钥,而不是环境变量。)

是否可以让 shell 像这样进行通信?

【问题讨论】:

  • 很抱歉,这是一个服务器故障问题。

标签: security shell communication environment-variables


【解决方案1】:

没错。由于每个进程都有自己的环境变量副本,因此您不能一次神奇地更改它们。但是,如果您足够弯曲自己的想法,则有一些奇怪的解决方法。

例如,如果您当前运行一个命令来更新每个命令,您可以自动运行该命令。检查 bash 手册页中的 PROMPT_COMMAND,它可以在每次打印 bash 提示时运行一个命令。大多数 shell 都有类似的东西。

至于不将散列密码放在磁盘上,因为您是从 envvar 而不是 ssh-agent 之类的东西中提取它...那将是一个完整的“另一个主题”。

【讨论】:

    【解决方案2】:

    除非您编写自己的 shell,否则您不能。 ssh-agent 的工作原理是让每个 SSH 客户端联系它以获取密钥,但大多数常见的 shell 没有类似的机制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-09
      • 1970-01-01
      • 2011-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多