para - tmux split
Cómo crear una nueva sesión de tmux si no existe (7)
Estoy intentando averiguar cómo adjuntarme a una tmux session
si existe una sesión de tmux con nombre, si no, quiero crear una nueva con el nombre dado.
Actualmente, conozco algunos comandos de tmux
que en parte pueden lograr lo que estoy buscando, pero no está claro cómo combinarlos para obtener lo que estoy buscando:
-
tmux attach
conecta a una sesión existente automáticamente, pero se produce un error si no existe una sesión -
tmux new
crea una nueva sesión, pero lo hace siempre, así que no puedo dejarla en mi.tmux.conf
-
tmux has-session
prueba si existe una sesión, pero no sé cómo unirla con los otros comandos
Por lo tanto, me gustaría crear un script tmux, para que esto ocurra automáticamente, en lugar de tener que crearlo manualmente cada vez que necesito iniciar sesión en una sesión.
¿Cómo puedo escribir un script automático para crear una nueva sesión de tmux (si no existe un nombre de sesión dado) o adjuntarlo a un nombre de sesión (si existe)?
Al adaptar la sugerencia de Alex para incluir la configuración basada en proyectos al inicio, comencé a usar lo siguiente:
# ~/bin/tmux-myproject shell script
# The Project name is also used as a session name (usually shorter)
PROJECT_NAME="myproject"
PROJECT_DIR="~/myproject"
tmux has-session -t $PROJECT_NAME 2>/dev/null
if [ "$?" -eq 1 ] ; then
echo "No Session found. Creating and configuring."
pushd $PROJECT_DIR
tmux new-session -d -s $PROJECT_NAME
tmux source-file ~/bin/tmux-${PROJECT_NAME}.conf
popd
else
echo "Session found. Connecting."
fi
tmux attach-session -t $PROJECT_NAME
donde tmux-myproject.conf
es mi serie de inicio de comandos de tmux para crear mis ventanas y paneles, así como también para iniciar mis editores.
Alternativamente, puedes agregar
new-session
a su .tmux.conf
- que creará una sesión predeterminada en el inicio del servidor.
Entonces, tmux attach
se conectará a la sesión actual (es decir, servidor en ejecución) o creará una nueva sesión (iniciará el servidor, leerá el archivo de configuración, emitirá el comando de new-session
) y se conectará a eso.
Aunque creo que la respuesta de rampion es suficiente para usar 1 sesión, esta secuencia de comandos le permite configurar varias sesiones:
SESSIONS="work play"
function has-session {
tmux has-session -t $1 2>/dev/null
}
function except
{
if [ "$?" -eq 1 ] ; then
$1
fi
}
# Configure your sessions here
function session-work
{
tmux new-session -d -s work
tmux neww -k -t work:1
}
function session-play
{
tmux new-session -d -s play
tmux neww -k -t play:1
}
#
#MAIN
for x in $SESSIONS
do
echo $x
has-session $x
except session-$x
done
NOTA:
-k --> new-window will not be created if already exists
-d --> start session or window, but don''t attach to it yet
-s --> name the session
-t --> specify a target location in the form session:window.pane
Como se señaló en los comentarios de Petr Viktorin , jkoelker y pjincz , puede usar el siguiente comando para adjuntar a mySession
si existe, y para crearlo si no lo hace:
tmux new -A -s mySession
De man tmux
:
new-session
[-AdDEP] [-c
start-directory
] [-F
format
] [-n
window-name
] [-s
session-name
] [-t
group-name
] [-x
width
] [-y
height
] [
shell-command
]
(alias:
new
)Crea una nueva sesión con nombre nombre
session-name
.[...]
El indicador
-A
hace que lanew-session
comporte comoattach-session
sisession-name
ya existe; en este caso,-D
comporta como-d
paraattach-session
.
Lo descubrí ( y me lo señalaron ).
tmux attach || tmux new
Para aquellos que quieren hacer lo mismo en el fish
:
tmux attach -t mysesh; or tmux new -s mysesh
Utilizo un alias para crear una nueva sesión si es necesario y adjuntar a mi sesión predeterminada si ya existe:
alias tmuxre=''tmux new-session -t default || tmux new-session -s default''
Agregué esto a mi .login en mi servidor.
La razón por la que lo hago de esta manera es porque no quiero adjuntarme a la misma sesión real, quiero una nueva sesión que use el mismo grupo de ventanas.
Esto también es similar a la ejecución de la screen -xRR
.