tmux
当我从现有 tmux 会话 ssh 到计算机上时,我想创建一个新窗口。但是,我不想在新机器上启动 tmux 会话!
我的 中有以下内容.bashrc
,以便tmux
自动启动:
if [[ "$TERM" != "screen" ]]
then
# try to attach to existing session, or start a new one
tmux attach-session -t "$USER" || tmux -2 new-session -s "$USER"
exit
fi
我还有一个ssh
功能:
alias ssh='ssh_func'
ssh_func (){
if [[ "$TERM" == "screen" ]]; then
tmux new-window -n "$1" "ssh $@";
else
/usr/bin/ssh "$@";
fi
}
这工作正常,但我不希望在我通过 ssh 连接的机器上启动 tmux 会话,因为这会在同一个终端窗口中提供 2 个会话。.bashrc
如果从 tmux 会话调用 ssh 命令,是否可以在我的计算机上放入任何内容,以便 tmux 不会在计算机上启动?
我正在使用 PuTTY 和 tmux 1.5。
答案1
鉴于您发布的代码,如果您从 tmux 中运行 ssh,您将拥有$TERM
= screen
,因此您不会尝试附加到 tmux 窗口。换句话说,您已有的代码应该可以按预期工作。有一些可疑的事情发生。确保您的点文件不会弄乱TERM
变量(如果您需要修改TERM
,这种情况非常罕见,请确保仅在非常特定的情况下才进行此操作;特别是如果是 ,则不要更改它screen
)。
答案2
您可以测试SSH_CONNECTION
环境变量是否存在:如果定义了该变量,则 shell 已从 SSH 启动。例如:
if [ -n "$SSH_CONNECTION" ]; then
# running within SSH session, do not start tmux
...
else
# logged in from console/terminal, start tmux
tmux ...
fi
该变量包含四个空格分隔的值:客户端 IP 地址、客户端端口号、服务器 IP 地址和服务器端口号。您可以使用它进行更复杂的匹配,例如:
case "$SSH_CONNECTION" in
client.ip.v4.addr*)
# client is client.ip.v4.addr != this host's addr
echo "you're connecting from a remote host, starting tmux"
tmux ...
;;
*server.ip.v4.addr)
# if server.ip.v4.addr == this hosts' address, then SSH_CONNECTION
# is not inherited from another connection
echo "SSH_CNNECTION is not stale"
;;
'')
# no SSH_CONNECTION at all
;;
esac
有关环境变量的更多详细信息,SSH_CONNECTION
请参阅“环境”部分ssh(1) 联机帮助页。