我使用Terminal.app和iTerm,它们都支持通过多个选项卡和多个窗口同时运行多个shell。我经常使用这个功能,但结果是,如果我想更改环境变量设置,我通常必须在我打开的每个选项卡和窗口中运行一次相同的命令 - 以及任何新的选项卡或窗口我将来开放。我的shell是否可以相互通信,以便我可以更改一次环境变量,并将该更改传播到我当前运行的所有其他shell?
我知道我可以在.bashrc
这样的启动文件中静态设置env变量。我也知道我可以让子shell通常或通过screen继承父shell的环境。这两个选项都没有解决这个问题。这个问题具体是关于同时动态改变多个当前运行的shell的环境。
理想情况下,我想在不将这些变量的内容写入磁盘的情况下完成此任务。我希望能够做到这一点的原因之一是我可以在env变量中设置敏感信息,例如散列密码,稍后在其他shell中引用它们。我想能够在登录时设置这些变量一次,并且能够在我的所有shell中引用它们,直到我退出,或者直到机器重新启动。 (这与ssh-agent
的工作方式类似,但据我所知,ssh-agent
只存储SSH密钥,而不是env变量。)
是否可以像这样进行shell通信?
答案 0 :(得分:1)
除非你自己编写shell,否则你不能。 ssh-agent的工作原理是让每个SSH客户端联系它以获取密钥,但是大多数常见的shell都没有类似的机制。
答案 1 :(得分:1)
右。由于每个流程都有自己的环境变量副本,因此您无法立即神奇地更改它们。如果你的思绪足够弯曲,那就有奇怪的解决方法。
例如,如果您当前有一个命令来运行以更新每个命令,则可以自动运行该命令。检查bash手册页中的PROMPT_COMMAND,它可以在每次打印bash提示符时运行命令。大多数炮弹都有类似的东西。
至于没有在磁盘上放置一个哈希密码,因为你是从envvar而不是像ssh-agent那样把它拉出来......这将是一个完整的主题。