是否有相当于“ screen -D -R”的tmux


13

我想知道是否有一种方法可以tmuxscreen -D -R我这样说,可以将命令作为Putty中的默认命令使用。

这些screen开关将强制为我的用户分离现有的屏幕会话(即使它仍处于活动状态并在其他地方登录),然后将其重新连接到当前会话。同样,在没有屏幕会话的情况下,它将创建一个新的屏幕会话。

我喜欢tmux,可以在屏幕上看到明显的好处,但是此功能的存在确实可以达成协议。

tmux attach 如果没有会话,似乎不会创建新会话。

tmux的手册页显示:

如果没有启动服务器,则attach-session(attach)将尝试启动它; 除非在配置文件中创建会话,否则此操作将失败。

粗体字部分是什么意思?(我找不到在conf文件中创建会话的示例)。


在手册页中:“ 配置文件是一组tmux命令,这些命令在服务器首次启动时会按顺序执行。 ”-实际上,您可能在行中attachnew-session行中.tmux.conf
sr_ 2012年

@sr_好吧,服务器首次启动的时间new-session无论如何都会发生……
克里斯·

刚刚在SO上发现了这个(封闭)问题。同样的问题,答案相似。stackoverflow.com/q/3432536/168034
phunehehe 2013年

Answers:


15

是:

$ tmux attach -d || tmux new

-d必须表现得像 screen -D,即使其他人分开。

通过ssh连接,然后附加或创建可能类似于:

$ cat bin/stmux
#!/bin/sh
exec ssh -t $@ 'tmux attach -d || tmux new'

$ stmux my.remote.box

1
是的-这似乎是实现我所要求的最有效的方法。同样,new-session如果您要在tmux会话中对其进行编辑和重新加载,我不赞成在配置文件中使用。
Geeb 2014年

4

tmux attach在没有会话时创建一个新会话,请使用new-sessiontmux配置文件中的选项。创建文件(~/.tmux.conf如果不存在),然后添加

new-session

对它。另外,我别名tmuxtmux attach:)


1
我不愿意参加new-session~/.tmux.conf因为如果我使用命令source-file ~/.tmux.conf(请参阅参考资料)重新加载配置,将启动一个新会话。是的,我可以先杀死它,然后再附加上一个,但这有点烦人。
mmoya

3

您可以使用shell函数进行仿真,这对于任何POSIX兼容shell都适用:

tmux() {
    if [ "$#" -ge 1 ] && [ "$1" = -z ]; then
        shift
        command tmux detach 2>/dev/null
        command tmux attach "$@" || command tmux new-session "$@"
    else
        command tmux "$@"
    fi
}

现在,如果您以方式启动它tmux -z,它将执行您想要的操作。


2

这个对我来说更好一点:

tmux new-session -AD -s <session-name>

1

我发现这对我最适合.bashrc

if [[ -z $TMUX ]]; then
  tmux attach-session || tmux new-session
fi

这如何解释OP中的粗体部分?
Anthon

0

如果您在.shrc文件或类似文件中使用此文件,exec我建议您

if tmux ls
  exec tmux attach
else
  exec tmux
fi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.