I am trying to adopt creating a tmux-workspace.sh script for my projects to help get my development environment set up quickly and easily.
One thing I found cumbersome was that my script would rerun the commands even if the tmux session exists. This produced a session whose layout had additional panes, windows, etc. depending on the script.
We can check if the session already exists before creating one. If a session already exists, we will just attach to it. Otherwise, we will create a session, set it up, and then attach to it.
session="workspace"
# Check if the session exists, discarding output
# We can check $? for the exit status (zero for success, non-zero for failure)
tmux has-session -t $session 2>/dev/null
if [ $? != 0 ]; then
# Set up your session
fi
# Attach to created session
tmux attach-session -t $session
According to the man page, the has-session
command "report[s] an error and exit with 1 if the specified session does not exist. If it does exist, exit with 0."
We run that command and discard the output with 2>/dev/null
. Afterwards, we can use $? to check the last command's exit status (has-session
in our case).
Now, I can run my script without manually checking which sessions are active (tmux ls
). Yup, I am that lazy.
Although, my laziness sometimes proves beneficial when it helps me find a more efficient approach to (and possibly automate) everyday task.