web-dev-qa-db-fra.com

Comment créer une nouvelle session tmux s'il n'en existe pas

J'essaie de comprendre comment attacher à un tmux session si une session nommée tmux existe, sinon je veux en créer une nouvelle avec le nom donné.

Actuellement, je connais quelques commandes tmux qui permettent en partie d'obtenir ce que je recherche, mais on ne sait pas comment les combiner pour obtenir ce que je recherche:

  • tmux attach attache à une session automatiquement existante - mais erreur s'il n'y a pas de session
  • tmux new crée une nouvelle session - mais cela se fait à chaque fois, donc je ne peux pas le laisser dans mon .tmux.conf
  • tmux has-session teste si une session existe - mais je ne sais pas comment l'assembler avec les autres commandes

Ainsi, je voudrais créer un script tmux, afin que cela se produise automatiquement, au lieu de le créer manuellement à chaque fois que je dois me connecter à une session. 

Comment puis-je écrire un script automatique pour créer une nouvelle session tmux (si un nom de session donné n'existe pas) ou pour joindre un nom de session (s'il existe)?

120
rampion

Alternativement, vous pouvez ajouter

new-session

à votre .tmux.conf - qui créera une session par défaut au démarrage du serveur.

Ensuite, tmux attach sera attaché à la session en cours (le serveur en cours d'exécution) ou créera une nouvelle session (démarrez le serveur, lira le fichier de configuration, exécutera la commande new-session) et y sera associé.

87
Leonid Shevtsov

Je l'ai compris ( et il m'a été signalé ). 

tmux attach || tmux new
152
rampion

En adaptant la suggestion d'Alex d'inclure la configuration basée sur le projet au démarrage, j'ai commencé à utiliser les éléments suivants:

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

tmux-myproject.conf est ma série de commandes de démarrage tmux pour créer mes fenêtres et mes volets, ainsi que pour démarrer mes éditeurs.

13
Anm

Bien que la réponse de rampion soit suffisante pour utiliser une session, ce script vous permet de configurer plusieurs sessions:

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

REMARQUE:

-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 
13
Alex Gaudio

J'utilise un alias pour créer une nouvelle session si nécessaire et attache à ma session par défaut s'il existe déjà:

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

J'ai ajouté ceci à mon .login sur mon serveur.

La raison pour laquelle je le fais de cette façon est parce que je ne veux pas joindre à la même session réelle, je veux une nouvelle session qui utilise le même groupe de fenêtres.

Ceci est également similaire à l'exécution de screen -xRR.

8
Michael

Pour ceux qui veulent faire la même chose dans fish:

tmux attach -t mysesh; or tmux new -s mysesh
0
tinyspark