为什么在离开 ssh bash 连接时必须退出两次?

为什么在离开 ssh bash 连接时必须退出两次?

当通过 SSH 连接时,机器要求我退出两次才能返回到本地计算机的 shell;发生这种情况有什么原因吗,看起来不应该这样。

答案1

如果您在 启动的交互式 shell 之上启动了一个新的交互式 shell,就会发生这种情况ssh。例如,如果您从 shell 的启动文件(screen例如tmux)或从.bash~/.bash_profilebash/etc

从那里开始screentmux从那里开始会在其他进程运行时暂时“挂起”初始 shell 的启动。一旦您退出screentmux,初始 shell 会话将给您一个新的提示,您必须单独退出。

要解决此问题,请使用screenor tmux,而不是仅使用exec screenor exec tmux。这个会代替当前 shell 具有适当的进程。

如果您这样做,请确保在调用后不需要进一步设置,exec因为此调用永远不会将控制权返回到启动脚本(除非执行时发生错误exec)。

这是我自己的~/.profile文件(我不使用bash)中的一个示例,用于tmux在登录时启动:

if [ -z "$TMUX" ] && [ -z "$DISPLAY" ]; then
    if tmux has-session; then
        exec tmux attach-session
    else
        exec tmux
    fi
fi

tmux如果 shell 会话尚未在tmux会话中运行(TMUX如果是,则设置),并且如果我们不在图形环境中(DISPLAY如果是,则设置),这将替换当前 shell 。如果存在tmux会话,则附加该会话,否则启动一个新会话。

相关内容