Domanda

Sto cercando di capire come collegare ad un tmux session se esiste una sessione di tmux di nome, se non voglio creare uno nuovo con il nome dato.

Al momento, so di alcuni comandi tmux che può in parte realizzare ciò che sto cercando, ma non è chiaro come combinarli insieme per ottenere quello che sto cercando:

  • attribuisce tmux attach a una sessione automaticamente esistente - ma gli errori se nessuna sessione esiste
  • tmux new crea una nuova sessione - ma lo fa ogni volta, quindi non posso lasciarlo nel mio .tmux.conf
  • test tmux has-session se esiste una sessione - ma non so come cucire insieme con gli altri comandi

Quindi, vorrei creare uno script tmux, in modo che questo avviene automaticamente, invece di dover creare manualmente ogni volta che ho bisogno di accedere a un sessioni.

Come faccio a scrivere uno script automatico in modo da creare una nuova sessione tmux (se una determinata sessione di esistere nome pretende molto) o allegare a un nome di sessione (se esiste)?

È stato utile?

Soluzione

In alternativa, è possibile aggiungere

new-session

al vostro .tmux.conf -. Che creerà una sessione di default all'avvio del server

Poi tmux attach sarà o allegare alla sessione corrente (in esecuzione del server, che è), o creare una nuova sessione (avviare il server, leggere il file di configurazione, eseguire il comando new-session) e allegare a questo.

Altri suggerimenti

ho capito ( e se fosse fatto notare a me ).

tmux attach || tmux new

Come sottolineato nei commenti da Petr Viktorin , jkoelker e pjincz , è possibile utilizzare il seguente comando per connettersi a mySession se esiste, e per creare, se non lo fa:

 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 )

     

Crea una nuova sessione con il nome session-name.

     

[...]

     

Le marche -A bandiera new-session si comportano come attach-session se session-name già esiste; in questo caso, si comporta come -D -d a attach-session .

new-session -A ha sostenuto dal tmux-1.8 .

Anche se trovo la risposta di rampion è sufficiente per l'utilizzo di 1 seduta, questo script consente di sessioni multiple di configurazione:

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 

Il suggerimento di Adattamento Alex per includere la configurazione base del progetto all'avvio, ho iniziato ad usare il seguente:

# ~/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

dove tmux-myproject.conf è la mia serie di avvio del tmux comandi per creare le mie finestre e vetri, così come iniziare i miei editori.

Io uso un alias per creare una nuova sessione, se necessario, e allegare alla mia sessione predefinita se esiste già:

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

ho aggiunto questo al mio .login sul mio server.

Il motivo per cui lo faccio in questo modo è perché non voglio allegare alla stessa sessione attuale, voglio una nuova sessione che utilizza lo stesso gruppo di finestre.

Questo è anche simile a correre screen -xRR.

Per coloro che vogliono fare la stessa cosa in fish:

tmux attach -t mysesh; or tmux new -s mysesh
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top