假设我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