Tmux

如何在附加時將環境變數從目前附加的客戶端傳遞到 tmux 會話

  • April 1, 2020

在純文字 SSH pty 中遠端工作時,我經常(主要)使用 tmux;如果連接斷開,它非常有用。我執行長時間(數小時到數天)的計算任務,並從不同的遠端主機連接以檢查它。這幾乎是我用 tmux 做的唯一事情;我遠非專業人士,所以我的問題可能非常基本,但我找不到答案。

我在主機上有一個命令,它從 shell 變數中讀取並解析出客戶端地址,$SSH_CONNECTION以某種方式與我目前客戶端電腦上的守護程序通信(直接,無 ssh 隧道)¹。當我附加到最初在另一台機器上啟動的會話時,這會在 tmux 下中斷。tmux 會話中最底層的 shell 在其啟動時已經擷取了變數,並且具有啟動會話的客戶端電腦的地址,而不是目前附加到它的地址。

一個簡單的解決方案是在 my 中完全重置此變數.bashrc,因此該工具甚至不會嘗試與 tmux 會話中的客戶端連接進行通信(畢竟,如果它無法猜一個)。我相信我可以依靠$TMUXenv 變數的存在來避免在我的 .bashrc 中完全擷取 IP 地址。

但正確的做法是以某種方式從我執行tmux attach命令的 bash 中提升這個變數。我知道它不能完全自動,因為遠端上的 tmux 可能無法修改已經執行的第一個 shell 的環境。tmux但也許我可以使用一些花哨的 tmux 腳本從執行命令的程序中提取環境變數attach(附加的 SSH 會話機器已在其環境中正確設置它們),將值儲存在會話 tmux 變數中的某處(它們是否甚至存在?),export SSH_SESSION=....當我知道它是安全的時,即在會話內的 bash 提示符上,讓我執行一個自定義命令來取消(即假輸入會話的 bash )?

TL; DR:tmux attach我想要一種方法在我附加到的會話中設置環境變數tmuxer 會。


¹這不是一個好的或安全的方法,但它就是這樣。我們必須在科學計算中使用很多奇怪的東西,這些東西是由其他科學家編寫的,他們或者其中一些已經是,在這種情況下,不一定是優秀的軟體工程師。在這個世紀我會做不同的事情,但這件事就像 30 歲一樣。

SSH_CONNECTION 預設處於更新環境中,因此它將在附加的會話環境中更新,然後您可以將其複製到 tmux 內正在執行的 shell 中,如下所示:

eval $(tmux showenv -s SSH_CONNECTION)

引用自:https://unix.stackexchange.com/questions/508863