Create New Tmux Session From Inside A Tmux Session


Answer :

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.



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.



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.



Comments

Popular posts from this blog

Converting A String To Int In Groovy

"Cannot Create Cache Directory /home//.composer/cache/repo/https---packagist.org/, Or Directory Is Not Writable. Proceeding Without Cache"

Android How Can I Convert A String To A Editable