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 sessiontmux 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 commandesAinsi, 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)?
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é.
Je l'ai compris ( et il m'a été signalé ).
tmux attach || tmux new
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
où 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.
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
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
.
Pour ceux qui veulent faire la même chose dans fish
:
tmux attach -t mysesh; or tmux new -s mysesh