![如何配置 GNU screen 或 tmux 以重新附加到先前的会话而不使用命令行参数?](https://linux22.com/image/159136/%E5%A6%82%E4%BD%95%E9%85%8D%E7%BD%AE%20GNU%20screen%20%E6%88%96%20tmux%20%E4%BB%A5%E9%87%8D%E6%96%B0%E9%99%84%E5%8A%A0%E5%88%B0%E5%85%88%E5%89%8D%E7%9A%84%E4%BC%9A%E8%AF%9D%E8%80%8C%E4%B8%8D%E4%BD%BF%E7%94%A8%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8F%82%E6%95%B0%EF%BC%9F.png)
通过启动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
}
到目前为止还没有遇到任何麻烦;我认为在特定服务器上已经存在多年了