How to create new tmux session if none exists
Solution 1
Alternately, you can add
new-session
to your .tmux.conf
- that will create a default session on server start.
Then tmux attach
will either attach to the current session (running server, that is), or create a new session (start the server, read the config file, issue the new-session
command) and attach to that.
Solution 2
I figured it out (and had it pointed out to me).
tmux attach || tmux new
Solution 3
As pointed out in comments from Petr Viktorin, jkoelker and pjincz, you can use the following command to attach to mySession
if it exists, and to create it if it doesn't:
tmux new -A -s mySession
From man tmux
:
new-session
[-AdDEP] [-c
start-directory
] [-F
format
] [-n
window-name
] [-s
session-name
] [-t
group-name
] [-x
width
] [-y
height
] [
shell-command
]
(alias:
new
)Create a new session with name
session-name
.[...]
The
-A
flag makesnew-session
behave likeattach-session
ifsession-name
already exists; in this case,-D
behaves like-d
toattach-session
.
new-session
has supported -A
since tmux-1.8.
Solution 4
Adapting Alex's suggestion to include project based configuration upon startup, I started using the following:
# ~/bin/tmux-myproject shell script
# The Project name is also used as a session name (usually shorter)
PROJECT_NAME="myproject"
PROJECT_DIR="~/myproject"
tmux has-session -t $PROJECT_NAME 2>/dev/null
if [ "$?" -eq 1 ] ; then
echo "No Session found. Creating and configuring."
pushd $PROJECT_DIR
tmux new-session -d -s $PROJECT_NAME
tmux source-file ~/bin/tmux-${PROJECT_NAME}.conf
popd
else
echo "Session found. Connecting."
fi
tmux attach-session -t $PROJECT_NAME
where tmux-myproject.conf
is my startup series of tmux commands to create my windows and panes, as well as start my editors.
Solution 5
Although I find rampion's answer is sufficient for using 1 session, this script lets you setup multiple sessions:
SESSIONS="work play"
function has-session {
tmux has-session -t $1 2>/dev/null
}
function except
{
if [ "$?" -eq 1 ] ; then
$1
fi
}
# Configure your sessions here
function session-work
{
tmux new-session -d -s work
tmux neww -k -t work:1
}
function session-play
{
tmux new-session -d -s play
tmux neww -k -t play:1
}
#
#MAIN
for x in $SESSIONS
do
echo $x
has-session $x
except session-$x
done
NOTE:
-k --> new-window will not be created if already exists
-d --> start session or window, but don't attach to it yet
-s --> name the session
-t --> specify a target location in the form session:window.pane
Related videos on Youtube

rampion
Mathematician, programmer, and researcher; with interests in algorithmic design, software engineering theory, and massively parallel computing. I'm also a keyboard junkie and an aspiring language nerd.
Updated on April 21, 2022Comments
-
rampion about 1 month
I am trying to figure out how to attach to a
tmux session
if a named tmux session exists, if not I want to create a new one with the given name.Currently, I know of a few
tmux
commands which can partly achieve what I am looking for, but its not clear how to combine them together to get what I am looking for:tmux attach
attaches to an automatically existing session - but errors out if no session existstmux new
creates a new session - but it does so every time, so I can't leave it in my.tmux.conf
tmux has-session
tests whether a session exists - but I don't know how to stitch it together with the other commands
Thus, I would like to create a tmux script, so that this happens automatically, instead of having to manually create it everytime I need to log into a sessions.
How can I write a automatic script so as to create a new tmux session (if a given session name doesnt exist) or attach to a session name (if it exists)?
-
rampion over 11 years@kzh: I view it as a programming tool question, like vim
-
chakrit about 9 yearsI have written another possible answer for this question as a gist, in case anyone's interested: gist.github.com/chakrit/5004006
-
Petr Viktorin over 8 yearsMeanwhile, my
man tmux
says: "The -A flag makes new-session behave like attach-session if session-name already exists" -
alpha_989 about 4 years@BradLarson, currently, the best/simplest option to do this is answered in a comment, way down: stackoverflow.com/questions/3432536/…. Most users who come here wont be able to find this. This is obviously a very important question as you can see by the number of votes. Is it possible to open this question, so I can add that as an answer, so new people can find this?
-
Ciro Santilli Путлер Капут 六四事 about 3 years
-
Andrew about 10 yearsThis answer works better for me because I can name the session:
tmux attach-session -t my-session || tmux new-session -s my-session
. The only problem is this is not atomic. tmux really ought to have a create-or-attach command. -
Anm almost 10 yearsIf you are in and out of your session often, this leaves lots of unused sessions, as seen by
tmux list-sessions
. -
Michael over 9 yearsYeah, it does, I just clean them up every now and then. It's a minor drawback to get the functionality I want.
-
azat about 9 yearsI have next alias in bash -
alias tm='tmux attach || tmux new'
-
Cheezmeister over 8 yearsUpvoting because with a small tweak this works with named sessions:
tmux attach -t some_name || tmux new -s some_name
. Change some_name to $1 add a shebang, and save. -
anatoly techtonik over 8 years@RandalSchwartz, yes - why
new-session
is better? -
daboross about 8 yearsI think both answers are good for different use cases. I modified this to not output any error messages with attach:
(tmux has &>/dev/null) && tmux attach || tmux new
. I currently use both answers in different environments. -
Esteis almost 7 yearsNote to those unfamiliar with tmux and wondering about
new
vsnew-session
: they are synonyms, and so areattach
andattach-session
. -
Michael over 6 yearsHey @mateusz-piotrowski - I agree with the edit to wrap my code in a code block but why would you edit the other text to be different than what I said? Sorry to comment here but I didn't see anywhere else to.
-
Mateusz Piotrowski over 6 yearsI didn't mean to offend you. I just thought you couldn't run an alias in a config file and so it must have been a typo.
-
Michael over 6 yearsProper grammar/phrasing or not, I would hope that if user content is going to be edited on this site, there is some discussion with the user involved, as it seems very heavy-handed and easy to abuse otherwise. I didn't see any way to participate in this process myself, you just arbitrarily decided what I must have meant and changed what I said without bothering to ask for clarification.
-
Tino almost 6 years
tmux new-session -ds default \; split-window -dv 2>/dev/null; tmux attach -t default
works far better and does not open a second tmux in case you/bin/kill
the first one. The only downside is that you need to name the sessions for this. -
pjincz about 5 yearsBy now, you can just type:
tmux new -A -s default
to launch a new session if it is not exist or attach automatically. I think it's much better than editing config file. -
Michael about 5 years@pjincz - that doesn't do what I wanted. That just makes a single session, whereas I wanted multiple sessions connected to the same window set.
-
alpha_989 about 4 years@rampion, the link doesnt seem to be working.. also a better solution maybe available here: stackoverflow.com/questions/3432536/…
-
dragon788 almost 4 yearsIf you are going to use this in something like
gnome-terminal
as the command I'd suggest leaving off the-s
and the specific session name so you don't end up with EVERY newgnome-terminal
session attached to the same session. You can always select an existing session withprefix + s
after opening a new terminal. -
Chang Ye almost 2 yearsSomeone who met a unexpected error to run this command with tmux 3.2 can try
tmux a || true && tmtux n
, which is more robust.