从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
)
下一个会话
注意:默认情况下, Prefix
是Ctrl-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克隆”“