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

时间:2013-05-06 12:32:09

标签: tmux

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

除了需要在tmux会话中创建新的tmux会话的情况之外,我的一切都运行良好。

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

  

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

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

这可能吗?

6 个答案:

答案 0 :(得分:113)

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

ctrl-b :new

要创建新会话,请

ctrl-b s

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

答案 1 :(得分:24)

如何创建脚本

此脚本将检查会话是否存在。如果会话不存在,请创建新会话并附加到该会话。如果会话确实存在,则没有任何反应,我们会附加到该会话随意更换`〜/ development'项目名称。

SET @ColumnNames = LEFT(@ColumnNames, LEN(@ColumnNames)-1)

int i, j = 0;
int rows = 5;
int cols = 2;

int rows2 = 3; // for 3d array

double  **arr2d = (double  **)calloc(rows, sizeof(double));
double  ***arr3d = (double  ***)calloc(rows, sizeof(double));
for (i = 0; i < rows; j++)
{
    arr2d[i] = (double *)calloc(cols, sizeof(double));
}

arr2d[1][2] = 0.0; //Or *(*(arr2d+1)+2) = 0.0;

//the same thing for 3d it just need another for loop.
for (i = 0; i < rows; j++)
{
    arr3d[i] = (double **)calloc(cols, sizeof(double));
    for (j = 0; i < cols; j++)
    {
        arr3d[i][j] = (double *)calloc(rows2, sizeof(double));
    }
}

arr3d[1][2][1] = 0.0; //Or *(*(*(arr2d+1)+2)+1) = 0.0;

终端

的新会话

让我们创建两个分离的会话,列出它们,附加到一个,然后从tmux循环到会话。

$ touch ~/development && chmod +x ~/development来自tmux内部,因为我们正在创建一个新的分离会话。否则,您将收到嵌套错误。

# ~/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 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,在Mac OSX中,您可以将大写锁定更改为ctrl Prefix

在tmux

内使用命令模式附加到会话

尝试在不分离的情况下附加到会话将导致错误。

Ctrl-a

而是使用命令模式system preferences > keyboard > modifier keys $ tmux attach -t development > sessions should be nested with care, unset $TMUX to force ,然后输入Prefix并按Enter键。

答案 2 :(得分:21)

使用它对我有用:

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

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

答案 3 :(得分:15)

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

因此,ctrl-b :后跟new -s sessionName将完全按照您的意愿执行,并为您的会话命名。它还会自动切换到新会话。

答案 4 :(得分:7)

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

答案 5 :(得分:5)

at 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"'