OYB software, shell

Smart tmux sessions


Instead of tmux just type


Get the code from github, and append it to your .zshrc or .bashrc.

To do it in one step, paste in zsh

wget https://raw.githubusercontent.com/nachoparker/smart-tmux-sessions/master/start_tmux.sh -O - >> ~/.zshrc

, or in bash

wget https://raw.githubusercontent.com/nachoparker/smart-tmux-sessions/master/start_tmux.sh -O - >> ~/.bashrc

New shell sessions will automatically start or resume a tmux session. Comment last line of .zshrc or .bashrc after installation if you do not want this.


The following shell function is my preferred way of starting a shell tmux session.

Tmux consists of a server-client architecture. This is great, because if your terminal is closed, you can later come back and resume exactly where you left off.

One catch of this is that if you are not careful, you can end up with numerous orphan tmux sessions where work is halfway through, vim sessions are still open and so on, and you inadvertedly just open yet another one.

This function simply makes sure that there are no orphan tmux sessions running. If so, it attaches to them.

Upon exiting the shell session, other orphan sessions will be restored, until aren’t any left.

Should you want to leave a session “as is” to come back later, just close the terminal ( or tmux kill-pane ^Ax ). I find this useful for SSH if one includes start_tmux in your .zshrc or .bashrc script.

# Simple, convenient way of starting and restoring tmux sessions
# Copyleft 2017 by Ignacio Nunez Hernanz <nacho _a_t_ ownyourbits _d_o_t_ com>
# GPL licensed (see end of file) * Use at your own risk!
# I source this function as part of my .bashrc or .zshrc
# I also run 'start_tmux' at the end of my .bashrc/.zshrc in all my servers
# Usage:
#   start_tmux # instead of just 'tmux'
# Notes:
#   It attaches to existing orphan tmux sessions upon exiting current tmux session
function start_tmux()
  test -z ${TMUX} || return                       # fail if already in a TMUX session
  while true; do
    tmux ls -F "#{session_id}:#{session_attached}" 2>/dev/null | \
      while read l; do                            # search for unused sessions
        local  ID=$( echo $l | cut -f1 -d: )
        local NUM=$( echo $l | cut -f2 -d: )
        test "$NUM" != "0" || break;
    if [[ "$ID" != "" ]]; then                    # use unused sessions,if they exist
      tmux attach -t $( echo $ID | sed 's=\$==' )
      local ID=""
# License
# This script is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
# This script is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this script; if not, write to the
# Free Software Foundation, Inc., 59 Temple Place, Suite 330,
# Boston, MA  02111-1307  USA


Author: nachoparker

Humbly sharing things that I find useful [ github dockerhub ]

1 Comment

Leave a Reply to 4t4v1c Cancel reply

Your email address will not be published. Required fields are marked *