Create new tmux session from inside a tmux session

自古美人都是妖i 提交于 2019-12-03 01:52:04

问题


I'm writing a shell script that creates / attaches or switches to a given session, depending on whether one is inside tmux and the session exists.

I've got everything working great except for the case requiring the creation of a new tmux session from within a tmux session.

When my script executes tmux new-session -s name, I get the following output:

sessions should be nested with care, unset $TMUX to force

I don't actually want to nest sessions, my goal is to create another separate session and switch to it from within a tmux session.

Is this possible?


回答1:


The quickest way (assuming you use ctrl-b as your command prefix) is:

ctrl-b :new

To create a new session, then

ctrl-b s

to interactively select and attach to the session.




回答2:


How to create the script

This script will check if a session exists. If session does not exist create new session and attach to it. If session does exist nothing happens and we attach to that session. Feel free to replace `~/development' with project name.

$ touch ~/development && chmod +x ~/development

# ~/development

tmux has-session -t development
if [ $? != 0 ]
then
  tmux new-session -s development
fi
tmux attach -t development  

New session from terminal

Let's create two detached sessions, list them, attach to one and then from within tmux cycle through sessions.

tmux new -s name -d works from inside tmux because we're creating a new detached session. Otherwise you'll get a nesting error.

$ 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]

New session from within tmux

We are now inside or better known as attached to our target session. If we try to create a new session while attached it will result in a nesting error.

$ tmux new -s bar
> sessions should be nested with care, unset $TMUX to force

To solve this we create a new detached session. e.g.,

$ 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]

Cycle (switch) Sessions

  • Prefix ( previous session
  • Prefix ) next session

note: Prefix is Ctrl-bby default. You can bind Prefix to Ctrl-a and in Mac OSX you can change Caps Lock to ctrl system preferences > keyboard > modifier keys

Attach to a session using command mode while inside tmux

Trying to attach to a session without detaching will result in an error.

$ tmux attach -t development
> sessions should be nested with care, unset $TMUX to force

Instead use command mode Prefix : then type attach -t session_name and hit enter.




回答3:


Using this works for me:

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.




回答4:


All the commands you can launch within your terminal, like tmux new -s sessionName can be launched from within tmux by pressing the trigger key (eg: ctrl-b) then : then the command without the starting tmux part.

As a result, ctrl-b : followed by new -s sessionName will do exactly what you want and give a name to your session. It also switches automatically to the new session.




回答5:


You can try unset TMUX first, this works for me.




回答6:


at user2354696's advice I use following key bindings to create a new session or "clone" an existing session

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


来源:https://stackoverflow.com/questions/16398850/create-new-tmux-session-from-inside-a-tmux-session

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!