tutorial para mac commands comandos close tmux

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 la new-session comporte como attach-session si session-name ya existe; en este caso, -D comporta como -d para attach-session .

new-session ha sido compatible con -A desde tmux-1.8 .



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 .