If you try to start a new tmux session from within a tmux session you get the error message
sessions should be nested with care, unset $TMUX to force. So what does this mean?
It basically means that tmux doesn’t like it if you nest a tmux session in an already active tmux session. Doesn’t mean it is impossible to do so. You can nest a tmux session by unsetting $TMUX, helpful error message right. You do this as follows:
$ TMUX='' tmux
This gets you a new tmux session inside your currently active tmux window.
More likely the way to go is to detach from your current session first with
Create and attach to tmux session in shell script
If you’re writing a shell script that switches or attaches to a tmux session depending on whether you’re in tmux or not you can do that as follows.
- First you check if a tmux session exists with a given name.
- Create the session if it doesn’t exists.
- Attach if outside of tmux, switch if you’re in tmux.
#!/bin/bash session_name="sesh" # 1. First you check if a tmux session exists with a given name. tmux has-session -t=$session_name 2> /dev/null # 2. Create the session if it doesn't exists. if [[ $? -ne 0 ]]; then TMUX='' tmux new-session -d -s "$session_name" fi # 3. Attach if outside of tmux, switch if you're in tmux. if [[ -z "$TMUX" ]]; then tmux attach -t "$session_name" else tmux switch-client -t "$session_name" fi
A logical improvement to make based on this script is to get the session name from an argument to your script. So instead of hardcoding the tmux session name to “sesh” you would use the value in
$1 for example.
A great resource for learning more about tmux are its man pages. You can read them online here or from the command-line using the following command:
$ man tmux
Or take a look at this book: