[v0z.cc]

blog de notas publico sobre linux y mas.

Scripting una sesión de tmux

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