2013-05-06 142 views
59

我正在编写一个创建/附加或切换到给定会话的shell脚本,具体取决于tmux是否位于会话中并且会话是否存在。在tmux会话中创建新的tmux会话

除了需要在tmux会话中创建新的tmux会话的情况外,我已经将所有的工作都很好。

当我的脚本执行tmux new-session -s name,我得到下面的输出:

会议应被嵌套谨慎,未设置$ TMUX强制

我真的不希望巢会议,我的目标是创建另一个单独的会话,并从一个tmux会话内切换到它。

这可能吗?

回答

87

的最快方法(假设你使用ctrl-b作为命令前缀)是:

ctrl-b :new 

要创建一个新的会话,然后

ctrl-b s 

交互式地选择并连接到会议。

+4

+1对于不关心解决方案的应用程序应该小心嵌套,取消设置$ TMUX强制“ – 2014-10-14 13:20:21

+2

,然后你可以重新命名你的会话:'ctrl-b $' – nha 2015-02-09 14:30:54

+7

和'Ctrl-b:new -s '给出新会话的名字。 – 2015-04-28 11:50:39

18

使用这个工作对我来说:

TMUX= tmux new-session -d -s name 
tmux switch-client -t name 

在第一行的TMUX=所以TMUX不会引发sessions should be nested with care, unset $TMUX to force消息是必需的。

+1

将第一行改为:'TMUX = \'tmux new-session -d -s name \'' – 2013-05-07 02:04:03

4

你可以试试unset TMUX首先,这对我有用。

11

所有命令您可以在终端中启动,像tmux new -s sessionName可以从tmux内按触发键启动:无需启动tmux一部分(例如ctrl-b)然后:然后命令。

因此,ctrl-b :后跟new -s sessionName将完全按照您的要求进行操作,并为会话命名。它也自动切换到新的会话。

4

在user2354696的意见,我用下面的键绑定,以创建一个新的会话或“克隆”现有会话

 
bind-key N run-shell 'TMUX= tmux new-session -d \; switch-client -n' 
bind-key C run-shell 'TMUX= tmux new-session -t $(tmux display-message -p #S) -s $(tmux display-message -p #S-clone) -d \; switch-client -n \; display-message "session #S cloned"' 
8

如何创建脚本

如果会话存在该脚本将检查。如果会话不存在,请创建新会话并附加到该会话。如果会话确实存在,则我们将附加到该会话。随意用项目名称替换`〜/ development'。

$ touch ~/development && chmod +x ~/development

# ~/development 

tmux has-session -t development 
if [ $? != 0 ] 
then 
    tmux new-session -s development 
fi 
tmux attach -t development 

从终端

新一届让我们创建两个分离的会议,一一列举了,通过会话连接到一个,然后从TMUX周期内。

tmux new -s name -d从tmux内部工作,因为我们正在创建一个新的独立会话。否则,你会得到一个嵌套错误。

$ tmux new -s development -d 
$ tmux new -s foo -d 
$ tmux ls 
> development: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54] 
> foo: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54] 
$ tmux attach -t 
$ tmux ls 
> development: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54] (attached) 
> foo: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54] 

从TMUX

内新一届我们现在都在里面或更好地称为连接我们的目标会话。如果我们尝试在连接时创建新会话,将导致嵌套错误。

$ tmux new -s bar 
> sessions should be nested with care, unset $TMUX to force 

要解决这个问题,我们创建一个新的独立会话。例如,

$ tmux new -s bar -d 
$ tmux ls 
> development: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54] (attached) 
> foo: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54] 
> bar: 1 windows (created Wed Jan 13 17:19:35 2016) [204x54] 

周期(开关)会话

  • Prefix(先前会话
  • Prefix)下一个会话

注:Prefix默认为Ctrl-b。您可以绑定PrefixCtrl-a和Mac OSX上,您可以更改Caps Lock键为Ctrl system preferences > keyboard > modifier keys

使用命令行模式中TMUX

试图连接到会话不拆卸将导致一个错误,而附加到一个会话。

$ tmux attach -t development 
> sessions should be nested with care, unset $TMUX to force 

而是使用命令模式Prefix:然后键入attach -t session_name并回车。