Question

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

À l'heure actuelle, je connais quelques commandes de tmux qui peut en partie réaliser ce que je cherche, mais ce ne est pas clair comment les combiner ensemble pour obtenir ce que je cherche:

  • tmux attach attache à une session existante automatiquement - mais des erreurs si aucune session existe
  • tmux new crée une nouvelle session - mais il le fait à chaque fois, donc je ne peux pas le laisser dans mon .tmux.conf
  • tests de tmux has-session si une session existe - mais je ne sais pas comment coudre ensemble avec les autres commandes

Ainsi, je voudrais créer un script tmux, de sorte que cela se produit automatiquement, au lieu d'avoir à créer manuellement chaque fois que je dois vous connecter à une session.

Comment puis-je écrire un script automatique de manière à créer une nouvelle session tmux (si un exist doesnt nom de session) ou joindre à un nom de session (si elle existe)?

Était-ce utile?

La solution

Vous pouvez également ajouter

new-session

à votre .tmux.conf -. Qui va créer une session par défaut au démarrage du serveur

Alors tmux attach sera soit joindre à la session en cours (serveur en cours d'exécution, qui est), ou créer une nouvelle session (démarrer le serveur, lisez le fichier de configuration, exécutez la commande new-session) et attacher à cela.

Autres conseils

I figured it out ( et l'avait souligné me ).

tmux attach || tmux new

Comme indiqué dans les commentaires Petr Viktorin , jkoelker et 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 )

     

Créer une nouvelle session avec le nom session-name.

     

[...]

     

Les marques de drapeau -A new-session se comportent comme attach-session si session-name existe déjà; dans ce cas, se comporte de -D comme -d attach-session .

new-session a soutenu -A depuis tmux-1,8 .

Bien que je trouve la réponse de raiponce est suffisante pour l'utilisation de 1 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

NOTE:

-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 suggestion de Alex inclure Adapter la configuration à base de projet lors du démarrage, je commencé à utiliser ce qui suit:

# ~/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 démarrage de commandes tmux pour créer mes fenêtres et vitres, ainsi que commencer mes rédacteurs en chef.

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

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

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

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

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

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

tmux attach -t mysesh; or tmux new -s mysesh
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top