【问题标题】:How do I start tmux with my current environment? [closed]如何使用当前环境启动 tmux? [关闭]
【发布时间】:2011-12-27 13:11:38
【问题描述】:

或者至少是其中的一部分,这是有道理的。

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

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

set-environment VAR $VAR

没有达到我的预期。

提前致谢:)

啊,我想我知道为什么了。

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

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

【问题讨论】:

  • 感谢乔治的提醒。
  • 有一种更简单的方法可以实现我想要实现的目标。使用“-L”(或“-S”)选项。这些使用当前环境启动一个新服务器。前任。 'tmux -L newenv' 每个 encantation 在该套接字上的服务器中创建一个新会话,具有相同的环境。 (您当然可以选择自己的名称) 'tmux -L newenv list-sessions,列出特定服务器上的会话。 ...等

标签: tmux


【解决方案1】:

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

DISPLAY SSH_ASKPASS SSH_AUTH_SOCK SSH_AGENT_PID SSH_CONNECTION WINDOWID XAUTHORITY

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

set-option -ga update-environment ' YOUR_VAR'

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

【讨论】:

  • 反响很好。注意:当 tmux 服务器已经运行时,不会读取 ~/.tmux.conf 文件,因此这样的更改不会生效。我原以为它会在“tmux attach-session”期间被读取,但它没有被应用。
  • 抱歉恢复这个,但手册页说“当创建新会话或重新连接旧会话时,可以使用更新环境会话选项从客户端更新会话环境”。这表明它应该在重新附加到 existing 会话时更新它们,但似乎没有。有什么想法吗?
  • @CraftyThumber:如果您希望更新现有 shell 的环境,那么 tmux 无法做到这一点——进程一旦被分叉,它们就是独立的。新的孩子(例如窗口/窗格)将继承新更新的会话环境,但现有的不能被 tmux 更新。
  • 谢谢@ChrisJohnsen,我现在意识到了。 FWIW,我写了一个快速的 bash 函数来提取最新的 tmux showenv 并相应地更新自己。因此,在重新连接时,我可以通过调用 .bashrc 中的函数来更新 shell 环境:gist.github.com/4672606
  • 这可以继续工作(继承),但是如果我拆分 tmux 窗口,移动到该新窗口,然后键入 deactivate 它会删除 $VIRTUAL_ENV 变量,将 $PS1 变量修改回原来的,但不会重新修改 $PATH 变量,因此 which python 仍然指向 python 的 virtualenv 版本
猜你喜欢
  • 2016-01-04
  • 2011-12-09
  • 1970-01-01
  • 1970-01-01
  • 2015-03-07
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多