从tmux会话中创build新的tmux会话

我正在写一个shell脚本来创build/附加或切换到给定的会话,这取决于是否在tmux中并且会话存在。

除了要求在一个tmux会话中创build一个新的tmux会话的情况外,

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

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

我实际上并不想嵌套会话,我的目标是创build另一个单独的会话,并从一个tmux会话中切换到它

这可能吗?

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

 ctrl-b :new 

然后创build一个新的会话

 ctrl-b s 

以交互方式select并附加到会话。

使用这个工程对我来说:

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

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

您可以在terminal中启动的所有命令(如tmux new -s sessionName都可以通过按下触发器键(例如: ctrl-b )从tmux中启动,然后:然后是没有启动tmux部分的命令。

结果, ctrl-b :后跟new -s sessionName将完全按照你想要的来给你的会话命名。 它也自动切换到新的会话。

如何创build脚本

这个脚本将检查一个会话是否存在。 如果会话不存在,请创build新会话并附加到该会话。 如果会话不存在,我们将附加到该会话。 随意用项目名称replace`〜/ 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 

来自terminal的新会话

让我们创build两个分离的会话,列出它们,附加到一个,然后从tmux周期通过会话。

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

 $ 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内的新会话

我们现在进入或更好地被称为附加到我们的目标会议。 如果我们尝试在附加的情况下创build新的会话,则会导致嵌套错误。

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

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

 $ 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 ) 下一个会话

注意:默认情况下, PrefixCtrl-b 。 您可以将Prefix绑定到Ctrl-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并按回车。

您可以先尝试unset TMUX ,这对我unset TMUX

在user2354696的build议我使用下面的键绑定来创build一个新的会议或“克隆”一个现有的会议

 bind-key N运行shell'TMUX = tmux new-session -d \;  switch-client -n'
绑定密钥C运行shell'TMUX = tmux新会话-t $(tmux显示消息-p #S)-s $(tmux显示消息-p#S-clone)-d \;  switch-client -n \; 显示消息“会话#S克隆”“