当通过 SSH 连接时,机器要求我退出两次才能返回到本地计算机的 shell;发生这种情况有什么原因吗,看起来不应该这样。
答案1
如果您在 启动的交互式 shell 之上启动了一个新的交互式 shell,就会发生这种情况ssh
。例如,如果您从 shell 的启动文件(screen
例如tmux
)或从.bash
~/.bash_profile
bash
/etc
从那里开始screen
或tmux
从那里开始会在其他进程运行时暂时“挂起”初始 shell 的启动。一旦您退出screen
或tmux
,初始 shell 会话将给您一个新的提示,您必须单独退出。
要解决此问题,请使用screen
or tmux
,而不是仅使用exec screen
or 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
会话,则附加该会话,否则启动一个新会话。