Tmux es un terminal multiplexer. Te permite fácilmente saltar entre programas en una sola terminal, despegar las (corran en el background) y volver a colocar a otra terminal.
Para instalar simplemente ejecutar el commando:
sudo apt install tmux
Nuevo Script
Empezamos creando un nuevo script, abre un archivo nuevo y añade un bash shebang en la primera linea:
#!/bin/bash
Esta linea le dice al sistema que el siguiente script sera un bash script.
Crea una nueva session tmux (con var name)
Creamos una variable que contendrá el nombre de la sesión y posteriormente se lo pasamos al comando tmux para que se pueda identificar la sesión.
# Nombre de la sesión session="Minecraft" # Inicia una nueva sesión con nuestro nombre tmux new-session -d -s $session
Nombra una ventana por defecto y cambia a bash
Ahora editaremos la ventana por defecto y le pondremos un nombre. Llamaremos a la primera ventana «main». La primera ventana estará por defecto asignada al numero 0.
# Renombra la primera ventana y inicia bash tmux rename-window -t 0 'Main' tmux send-keys -t 'Main' '/bin/bash' C-m 'clear' C-m
Añadir otra ventana a para nuestro servidor Minecraft
Ahora queremos añadir un par mas de ventanas para efectuar diferentes tareas para ello usaremos el comando new-window con el flag -n
# Create una ventana para Minecraft tmux new-window -t $SESSION:1 -n 'Minecraft Server' tmux send-keys -t 'Minecraft Server' '/bin/bash' C-m '$HOME/minecraft/start.sh' C-m # Switch to bind script?
$HOME/minecraft/start.sh sera la ruta hacia donde se encuentra nuestro script que inicia el servidor minecraft.
Attach Session
Con nuestra sesión de tmux configurada, le podemos decir al script que se adjunte a la sesión, usando el commando attach-session con la variable de la sesión.
# Adjuntando la sesión a Main tmux attach-session -t $SESSION:0
Comprobar si la sesión ya existe
Ahora necesitamos una forma de comprobar si la sesión existe o no. Este se puede efectuar haciendo un list-sessions y pasar una tubería a grep con el nombre de la sesión para comprobar si existe.
SESSIONEXISTS=$(tmux list-sessions | grep $SESSION)
Si la sesión existe, abra una string que coincidirá con el grep buscado de lo contrario recibiremos una string vacía.
Ahora podemos utilizar un bloque if de bash.
if [ "$SESSIONEXISTS" = "" ] then ... fi
Conclusion
#!/bin/sh # Nombre de la sesión SESSION="Minecraft" SESSIONEXISTS=$(tmux list-sessions | grep $SESSION) # Solo crea una sesión tmux sino existe previamente if [ "$SESSIONEXISTS" = "" ] then # Inicia una nueva sesión con nuestro nombre tmux new-session -d -s $SESSION # Renombra la primera ventana y inicia bash tmux rename-window -t 0 'Main' tmux send-keys -t 'Main' '/bin/bash' C-m 'clear' C-m # Create una ventana para Minecraft tmux new-window -t $SESSION:1 -n 'Minecraft Server' tmux send-keys -t 'Minecraft Server' '/bin/bash' C-m '$HOME/minecraft/start.sh' C-m # Switch to bind script? fi # Adjuntando la sesión a Main tmux attach-session -t $SESSION:0
Extra
Como matar todas las sesiones de tmux.
#!/bin/sh #matar todas las sesiones de tmux tmux kill-server