如何在当前环境下启动tmux?

Phl*_*uks 34 tmux

或至少它的一部分,这是有道理的.

更具体地说,我有一些环境变量,它们是通过运行脚本导出的,为手头的任务创建了一个适当的环境.当我运行tmux时,这些变量在全局或会话环境中都无处可见.当然我可以再次运行这个脚本但是......

如果我可以在我的.tmux.conf文件中指定特定的变量,我会感到满意:

set-environment VAR $VAR
Run Code Online (Sandbox Code Playgroud)

不做我期望的事.

提前致谢 :)

啊,我想我知道为什么.

当启动第二个tmux会话时,比如说在另一个终端中,它会从第一个终端复制环境.第一个几乎采用了调用shell的当前环境并为它添加了一些tmuxiness.

我目前的解决方法是在需要更改环境时停止并启动我的tmux会话.

Chr*_*sen 62

您应该配置tmux会话选项update-environment以包括在创建新会话时要更新的变量.默认值包括几个常见的X11和SSH变量:

DISPLAY SSH_ASKPASS SSH_AUTH_SOCK SSH_AGENT_PID SSH_CONNECTION WINDOWID XAUTHORITY
Run Code Online (Sandbox Code Playgroud)

要添加变量,请使用带有和标志的set-option tmux命令(附加到现有的"全局"(默认)值).在你的:-g-a~/.tmux.conf

set-option -ga update-environment ' YOUR_VAR'
Run Code Online (Sandbox Code Playgroud)

请确保包含前导空格,以便将变量名称与默认值中的尾随名称分开.

  • 谢谢@ChrisJohnsen,我现在意识到了.FWIW,我写了一个快速的bash函数来提取最新的`tmux showenv`并相应地更新自己.因此,在重新连接时,我可以通过调用我的`.bashrc`中的函数来更新shell的环境:https://gist.github.com/4672606 (7认同)
  • @CraftyThumber:如果您希望更新现有shell的环境,则无法从*tmux*执行此操作 - 一旦分叉,进程就是独立的.新子节点(例如窗口/窗格)将继承新更新的会话环境,但现有节点不能通过*tmux*更新. (6认同)
  • 很好的回应.注意:当tmux服务器已经运行时,将不会读取〜/ .tmux.conf文件,因此这样的更改不会生效.我曾期望在"tmux attach-session"期间读取它,但它没有被应用. (4认同)