让远程 ssh 会话知道 tmux?

让远程 ssh 会话知道 tmux?

假设我tmux在机器 A 上运行一个会话,并从它启动一个ssh到机器 B 的交互式 shell。

我想更换机器BPS1以更好地适应下面的使用tmux;例如,我会将不同的内容包含到 XTerm 标题字符串中。

我宁愿不编辑机器 B 的设置以始终显示 tmux 优化的提示。有时我ssh从普通终端(不是tmux)连接机器 B,并希望它PS1在这种情况下使用我的常规终端。

是否有一个标准/公认的最佳方法来实现这一目标?

到目前为止,我想到的只是AcceptEnviron在机器 B 的配置中进行设置,并在连接时sshd传递自定义信号变量。ssh

答案1

这是执行您正在寻找的操作的一种可能方法:

tmux 在它创建的 shell 中设置环境变量(例如 $TMUX、$TMUX_PANE),它可以检测这些变量并运行 ssh 命令来通知远程会话客户端如何启动,我们正在研究两个步骤。

首先,检测 ssh 的启动位置,这可以在一个函数中完成,在本示例中名为“ssh”。

function ssh {
    if [ -z "$TMUX" ]; then
        # echo connecting from a plain terminal
        /usr/bin/ssh $1 # $1 is <user@hostname>
    else
        # echo connecting through tmux
        /usr/bin/ssh -t $1 bash --rcfile '~/.bashrc.tmux'
    fi
}   

注意:当函数与路径中的程序命名相同时,函数优先,如果您想避免混淆,请以不同的方式命名函数。

其次,为了让您的远程主机相应地设置提示符,请在远程主机上创建一个文件 ~/.bashrc.tmux,例如

# contents of .bashrc.tmux, override PS1 to your liking
source .bashrc
PS1="[\d \t \u@\h:\w ] $ "

或者,您可以设置一个环境变量以在更多地方使用

RUNNING_THRU_TMUX=true
source .bashrc

相关内容