如何配置 GNU screen 或 tmux 以重新附加到先前的会话而不使用命令行参数?

如何配置 GNU screen 或 tmux 以重新附加到先前的会话而不使用命令行参数?

通过启动GNU 屏幕或者多路复用器作为初始默认 shell (例如使用 chsh 设置),似乎不支持传递参数,比如“-d RR”用于屏幕tmux 的“附加”chsh 的参数是 shell 文件可执行文件的完整路径名(列于/etc/shells)。

对于屏幕,是否有内部命令将其自身重新附加到先前的屏幕会话?或者有没有办法从上一个屏幕会话到当前会话的各个进程?

对于 tmux,有没有办法在用户配置文件(~/.tmux.conf默认情况下)中设置直接进入上一个会话的选项?

在不带任何参数启动 tmux 后(这将创建一个新会话),可以手动切换到前一个会话(CTRL+ B, (),然后终止新启动的会话(CTRL+ B, :kill-session -a)。

答案1

好主意。我会创建一个包装器,看起来/bin/my-screen像这样:

#!/usr/bin/env sh

screen -d -RR

使其可执行并将其添加到/etc/shells

echo /bin/my-screen | sudo tee -a /etc/shells

使其成为默认 shell:

chsh --shell /bin/my-screen

请注意,某些终端模拟器(例如默认情况xterm下定义的 shell)不运行 shell /etc/passwd,但它们$SHELL首先检查变量。

您可以尝试将其添加到您的~/.screenrc

screen -X screen -d -RR

但请注意,该解决方案存在一个潜在问题 -screen如果没有screen可以重新附加的现有会话,您将根本无法启动。这意味着如果您将 shell 设置 screen为默认 shell,您将无法登录系统。

答案2

我的 zshrc 底部有这个:

[ -z "$TMUX" ] && {
    tmux attach || tmux new-session
}

到目前为止还没有遇到任何麻烦;我认为在特定服务器上已经存在多年了

相关内容