Comment créer une nouvelle session tmux si aucune existe
-
26-09-2019 - |
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)?
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 commeattach-session
sisession-name
existe déjà; dans ce cas, se comporte de-D
comme-d
attach-session
.
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
où 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