我正在尝试从screen转移到tmux(最终在byobu内使用tmux)。然而,我遇到了一个严重的问题,即环境变量没有被应用,特别是PS1。它们中的任何一个都没有被复制到会话(或窗口)环境中。我找到了这个似乎相关的主题:如何使用当前环境启动tmux?
然而,当我执行时,实际上可以看到所有正确的变量。
但是它们都没有被传递到会话环境中,所以当我执行时看不到任何内容。
坦白地说,这一切对我来说都很混乱。我可以看到每个屏幕都从一个干净的会话开始的好处,但在大多数情况下,这似乎很麻烦。我导出我打算在子进程中使用的变量,例如Python虚拟环境包装器函数,并期望它们可用。
: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虚拟环境包装器函数,并期望它们可用。
有没有办法禁用此行为?如果没有,我该如何将我的PS1变量传递给tmux?
编辑11/13/2013
我意识到删除第一行(default-command bash
)确实可以传递所有环境变量。但是,我真的不想让tmux的每个新屏幕都作为登录shell启动。例如,我特别在登录shell中声明了我的PS1变量,以便每次打开新屏幕时都不会被覆盖。
根据以下文章,tmux中的每个新屏幕都应启动为非登录shell: https://superuser.com/questions/614277/profile-and-bash-profile-ignored-when-starting-tmux-from-bashrc
为什么对我来说默认情况下没有发生这种情况?
-a
,因为这会附加到update-environment
。 - sjbx