【问题标题】:tmux - Environment variables don't show up in sessiontmux - 环境变量不显示在会话中
【发布时间】:2013-08-16 23:26:18
【问题描述】:

我正在尝试从屏幕移动到 tmux(最终在 byobu 中使用 tmux)。但是,我有一个严重的问题是没有应用环境变量,尤其是 PS1。它们都不会被复制到 session(或窗口)环境中。我发现这个话题似乎很相关:

How do I start tmux with my current environment?

然而,我实际上可以看到我所有正确的变量

:show-environment -g

但是它们都没有被转移到会话环境中,所以当我这样做时我什么也看不到

:show-environment

我的~/.tmuxrc 文件中有正确的update-environment 声明:

# start a non-login shell by default for each new window
set -g default-command 'bash'

# Prefix is C-a like in screen
unbind C-b
set -g prefix C-a

# Carry over the PS1
set-option -ga update-environment "PS1"

坦率地说,这一切在我看来都是一团糟。我可以看到从每个屏幕的干净会话开始的好处,但在大多数情况下,这似乎很痛苦。我导出了我打算在子流程中使用的变量,例如 Python virtualenvwrapper 函数,并希望它们可用。

有没有办法禁用这种行为?如果没有,我应该如何尝试将我的 PS1 变量转移到 tmux?

2013 年 11 月 13 日编辑

我意识到删除第一行 (default-command bash)确实会保留所有环境变量。但是,我真的不希望 tmux 的每个新屏幕都作为登录 shell 启动。例如,我在登录 shell 中专门声明了我的 PS1 变量,这样每当我打开新屏幕时它就不会被覆盖。

根据以下帖子,tmux 中的每个新屏幕都应作为非登录 shell 启动: https://superuser.com/questions/614277/profile-and-bash-profile-ignored-when-starting-tmux-from-bashrc

为什么默认情况下我没有发生这种情况?

【问题讨论】:

    标签: tmux


    【解决方案1】:

    Tmux 不能更新正在运行的进程(例如 bash),它只能更新自己的环境。如果您要启动一个新窗口/窗格,它将选择新环境。我的建议是使用这样的实用函数:

    #!/bin/bash
    
    tmup () 
    { 
        echo -n "Updating to latest tmux environment...";
        export IFS=",";
        for line in $(tmux showenv -t $(tmux display -p "#S") | tr "\n" ",");
        do
            if [[ $line == -* ]]; then
                unset $(echo $line | cut -c2-);
            else
                export $line;
            fi;
        done;
        unset IFS;
        echo "Done"
    }
    

    这会遍历 tmux 了解并更新您的 shell 的所有更新环境。

    【讨论】:

    • 感谢您的回答。我知道 tmux 无法更新正在运行的进程的环境变量,但这不是我想要的。我希望新打开的窗格和窗口具有与 tmux 启动时完全相同的一组变量。这似乎是 screen 的默认行为,但我仍然不明白为什么在 tmux 中模拟如此困难?
    • 啊,对不起,我误会了。通过从更新环境中删除所有内容,当然可以实现您想要的。你不应该在set-option 中使用-a,因为这将附加到update-environment
    • 再次感谢您的指点!我用一些新发现更新了这个问题。这是导致环境变量问题的第一行。但是,如果没有该行,tmux 中的每个新屏幕都会出于某种原因启动一个登录 shell。而且我不确定如何改变这种行为..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-27
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多