我正在编写一个创建/附加或切换到给定会话的shell脚本,具体取决于tmux是否位于会话中并且会话是否存在。在tmux会话中创建新的tmux会话
除了需要在tmux会话中创建新的tmux会话的情况外,我已经将所有的工作都很好。
当我的脚本执行tmux new-session -s name
,我得到下面的输出:
会议应被嵌套谨慎,未设置$ TMUX强制
我真的不希望巢会议,我的目标是创建另一个单独的会话,并从一个tmux会话内切换到它。
这可能吗?
我正在编写一个创建/附加或切换到给定会话的shell脚本,具体取决于tmux是否位于会话中并且会话是否存在。在tmux会话中创建新的tmux会话
除了需要在tmux会话中创建新的tmux会话的情况外,我已经将所有的工作都很好。
当我的脚本执行tmux new-session -s name
,我得到下面的输出:
会议应被嵌套谨慎,未设置$ TMUX强制
我真的不希望巢会议,我的目标是创建另一个单独的会话,并从一个tmux会话内切换到它。
这可能吗?
的最快方法(假设你使用ctrl-b
作为命令前缀)是:
ctrl-b :new
要创建一个新的会话,然后
ctrl-b s
交互式地选择并连接到会议。
使用这个工作对我来说:
TMUX= tmux new-session -d -s name
tmux switch-client -t name
在第一行的TMUX=
所以TMUX不会引发sessions should be nested with care, unset $TMUX to force
消息是必需的。
将第一行改为:'TMUX = \'tmux new-session -d -s name \'' – 2013-05-07 02:04:03
你可以试试unset TMUX
首先,这对我有用。
所有命令您可以在终端中启动,像tmux new -s sessionName
可以从tmux
内按触发键启动:无需启动tmux
一部分(例如ctrl-b
)然后:
然后命令。
因此,ctrl-b :
后跟new -s sessionName
将完全按照您的要求进行操作,并为会话命名。它也自动切换到新的会话。
在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"'
如果会话存在该脚本将检查。如果会话不存在,请创建新会话并附加到该会话。如果会话确实存在,则我们将附加到该会话。随意用项目名称替换`〜/ 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 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
。您可以绑定Prefix
到Ctrl-a
和Mac OSX上,您可以更改Caps Lock键为Ctrl system preferences > keyboard > modifier keys
试图连接到会话不拆卸将导致一个错误,而附加到一个会话。
$ tmux attach -t development
> sessions should be nested with care, unset $TMUX to force
而是使用命令模式Prefix
:
然后键入attach -t session_name
并回车。
+1对于不关心解决方案的应用程序应该小心嵌套,取消设置$ TMUX强制“ – 2014-10-14 13:20:21
,然后你可以重新命名你的会话:'ctrl-b $' – nha 2015-02-09 14:30:54
和'Ctrl-b:new -s'给出新会话的名字。 –
2015-04-28 11:50:39