从 tmux 会话内部创建新的 tmux 会话

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

除了需要从一个 tmux 会话中创建一个新的 tmux 会话之外,我已经让一切都工作得很好了。

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

会话应小心嵌套,未设置 $TMUX 强制

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

这可能吗?

111374 次浏览

使用这种方法对我很有效:

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

The TMUX= on the first line is required so tmux doesn't throw a sessions should be nested with care, unset $TMUX to force message.

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

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

ctrl-b :new

创建一个新会话

ctrl-b s

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

所有的命令,你可以在你的终端启动,如 tmux new -s sessionName可以从内部启动的 tmux按下触发键(例如: ctrl-b) ,然后 :,然后没有启动 tmux部分的命令。

因此,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 内部创建新会话

我们现在在我们的目标会议内或更好地称为 附件。如果我们尝试创建一个新的会话,而附加它将导致一个嵌套错误。

$ 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 中你可以将大写锁定改为 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并按回车键。