2010-12-10 52 views
1

我使用Terminal.app和iTerm,它們都支持通過多個選項卡和多個窗口同時運行多個shell。我經常使用這個特性,但是結果是,如果我想更改一個環境變量設置,我通常必須在每個打開的單個選項卡和窗口中運行相同的命令 - 以及任何新的選項卡或窗口我將來開放。我的shell可以相互通信,以便我可以更改一次環境變量,並將該更改傳播到所有其他當前正在運行的shell中?如何在所有正在運行的shell中修改環境變量?

我知道我可以靜態設置ENV變量像.bashrc啓動文件。我也知道,我可以通過子shell繼承父shell的環境,通常或通過screen。這兩個選項都不能解決這個問題。這個問題特別是關於動態改變多個當前運行的shell的環境。

理想情況下,我想做到這一點,而不在任何時候寫這些變量的內容到磁盤。我希望能夠這樣做的原因之一是,我可以在env變量中設置敏感信息,例如散列密碼,並在以後的其他shell中引用它們。我希望在登錄時能夠設置這些變量,並且能夠在我的所有shell中引用它們,直到我註銷爲止,或者直到重新啓動計算機。 (這與ssh-agent的工作方式類似,但據我所知,ssh-agent將僅存儲SSH密鑰,而不是env變量。)

是否有可能使shell像這樣通信?

+0

很抱歉,這是一個服務器故障問題。 – rook 2010-12-10 17:53:28

回答

1

對。由於每個進程都有自己的環境變量副本,因此不能一次性改變它們。如果你足夠彎腰,有一些奇怪的解決方法。

例如,如果你目前有一個命令運行更新各一隻,就可以自動運行命令。檢查bash手冊頁中的PROMPT_COMMAND,它可以在每次打印bash提示時運行命令。大多數炮彈有類似的東西。

至於沒有在磁盤上把一個散列密碼,因爲你是從ENVVAR,而不是像SSH代理拉......這將是一個整體「諾特爾話題。

1

除非你編寫自己的shell,你不能。 ssh-agent通過讓每個SSH客戶端聯繫密鑰來工作,但最常見的shell沒有類似的機制。

相關問題