我正在编写一个shell脚本来创建/附加或切换到给定的会话,具体取决于是否在tmux中并且会话存在。
除了需要在tmux会话中创建新的tmux会话的情况之外,我的一切都运行良好。
当我的脚本执行tmux new-session -s name
时,我得到以下输出:
会话应小心嵌套,取消设置$ TMUX强制
我实际上并不想嵌套会话,我的目标是创建另一个单独的会话并从tmux会话中切换到它。
这可能吗?
答案 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 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
尝试在不分离的情况下附加到会话将导致错误。
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"'