Pregunta

Estoy tratando de encontrar la manera de adjuntar a un tmux session si existe una sesión tmux llamado, si no quiero crear una nueva con el nombre dado.

En la actualidad, no sé de algunos comandos tmux que se puede lograr en parte, lo que estoy buscando, pero no está claro cómo combinarlos juntos para conseguir lo que estoy buscando:

  • tmux attach agregados a una sesión existente de forma automática -, pero los errores si existe ninguna sesión
  • tmux new crea una nueva sesión - pero lo hace todo el tiempo, así que no puedo dejarlo en mi .tmux.conf
  • si existe o no una sesión de pruebas tmux has-session - pero no sé cómo lo cose junto con los otros comandos

Por lo tanto, me gustaría crear un script tmux, para que esto suceda de forma automática, en lugar de tener que crear manualmente cada vez que tienen que ingresar a una sesiones.

¿Cómo puedo escribir un script automático, de manera que se cree una nueva sesión tmux (si existen un determinado nombre de la sesión duerma) o adjuntar a un nombre de sesión (si existe)?

¿Fue útil?

Solución

Como alternativa, se puede añadir

new-session

a su .tmux.conf -. Que creará una sesión por defecto en el arranque del servidor

A continuación, tmux attach o bien adjuntar a la sesión actual (que se ejecuta el servidor, que es), o crear una nueva sesión (se inicia el servidor, leer el fichero de configuración, ejecute el comando new-session) y adjuntar a eso.

Otros consejos

he descubierto ( y lo había señalado me ).

tmux attach || tmux new

Como se señaló en los comentarios de Petr Viktorin , jkoelker y pjincz , puede utilizar el siguiente comando para adjuntar a mySession si es que existe, y para crearlo si no es así:

 tmux new -A -s mySession

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 )

     

Crear una nueva sesión con el nombre de session-name.

     

[...]

     

Las marcas bandera -A new-session se comportan como attach-session si session-name ya existe; en este caso, se comporta como -D -d a attach-session .

new-session -A ha apoyado desde tmux-1,8 .

A pesar de que encuentro la respuesta de rampion es suficiente para el uso de 1 sesión, esta secuencia de comandos que permite múltiples sesiones de configuración:

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 

La sugerencia de Adaptación Alex para incluir la configuración basada en el inicio del proyecto, que comenzó a usar el 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 tmux comandos para crear las ventanas y paneles, así como iniciar mis editores.

Yo uso un alias para crear una nueva sesión si es necesario y adjuntarse a la sesión predeterminada si ya existe:

alias tmuxre='tmux new-session -t default || tmux new-session -s default'

He añadido esto a mi .login en mi servidor.

La razón por la que hago de esta manera es porque no quiero adjuntar a la misma sesión real, quiero una nueva sesión que utiliza el mismo grupo de ventanas.

Esto también es similar a la ejecución screen -xRR.

Para aquellos que quieran hacer lo mismo en fish:

tmux attach -t mysesh; or tmux new -s mysesh
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top