Si j'utilise
tmux attach
Je peux joindre à une session en cours mais s'il n'y a pas de session en cours, je ne reçois que l'erreur
no sessions
Comment puis-je démarrer automatiquement une nouvelle session s'il n'y en a pas? quelque chose comme
tmux attach-or-create-new-session
La réponse est beaucoup plus simple. Mettez simplement ceci dans votre ~/.tmux.conf
fichier:
# if run as "tmux attach", create a session if one does not already exist
new-session -n $Host
Si vous exécutez tmux attach
et il y a une session, puis elle sera attachée à cette session (qu'elle soit déjà attachée ou non). S'il y a déjà pas une session, il en créera une pour vous.
Si le nom de votre session est correct, il est facile de le faire avec le new-session
commande:
tmux new-session -A -s main
où main
est le nom de la session qui sera attaché ou créé si nécessaire.
De man tmux
:
Le
-A
le drapeau faitnew-session
se comporte commeattach-session
si nom-session existe déjà; dans ce cas,-D
se comporte comme-d
àattach-session
.
Veuillez également noter que le -A
L'option est introduite dans tmux version 1.8
à partir du 26 mars 201 , pour les versions antérieures, utilisez tmux attach || tmux
.
Cela démarrera une nouvelle session si l'attachement donne une erreur:
tmux attach || tmux new
Un alias fera donc l'affaire:
tm="tmux attach || tmux new"
Pensez à ajouter ce qui suit à votre .bashrc
if [ -z "$TMUX" ]; then
base_session='my_session'
# Create a new session if it doesn't exist
tmux has-session -t $base_session || tmux new-session -d -s $base_session
# Are there any clients connected already?
client_cnt=$(tmux list-clients | wc -l)
if [ $client_cnt -ge 1 ]; then
session_name=$base_session"-"$client_cnt
tmux new-session -d -t $base_session -s $session_name
tmux -2 attach-session -t $session_name \; set-option destroy-unattached
else
tmux -2 attach-session -t $base_session
fi
fi
Vous pouvez voir mon utilisation de cela dans mon fichier de ressources ZSH à mon dépôt github
Pour développer la réponse de Wesley Baugh (qui était des sessions à double imbrication pour moi lorsqu'il était utilisé dans .bashrc sur les connexions) et ajouter un peu de flexibilité car j'utilise souvent Sudo -s
sur les serveurs (qui chargeraient à nouveau consciencieusement mon .bashrc et double imbriquer), voici ce que j'ai dans mon .bashrc:
if [ -z "$TMUX" ] && [ ${UID} != 0 ]
then
tmux new-session -A -s main
fi
Ceci vérifie une session tmux et s'assure que vous n'êtes pas superutilisateur avant de créer une nouvelle session ou de l'attacher à celle existante nommée main
.
J'ai un peu amélioré la réponse @SuperMagic. Je mets ce bloc en haut de mon .zshrc
if [[ $TMUX = "" ]]; then
# try to reattach sessions
tmux ls | grep -vq attached && TMUXARG="attach-session -d"
exec eval "tmux -2 $TMUXARG"
fi
Si vous l'utilisez dans un fichier .shrc ou similaire avec exec
je recommanderais
if tmux ls
exec tmux attach
else
exec tmux
fi
Drew Frank a répondu à ceci ici: https://superuser.com/questions/487363/tmux-equivalent-of-screen-r
Voici le script que j'utilise maintenant pour cela (cependant, je suis revenu à l'écran en raison d'un autre problème avec tmux) /somewhere/on/your/path/ttmux
ou en tant que fonction Shell:
#!/bin/sh
# many thanks to Drew Frank: https://superuser.com/questions/487363/tmux-equivalent-of-screen-r
(tmux ls | grep -vq attached && tmux -2 at) || tmux -2
Le -2
les options font que tmux assume la prise en charge des terminaux 256 couleurs, donc celles-ci peuvent ne pas convenir à votre situation.
Voici une solution alternative de ce blog . Fonctionne comme un charme.
session="main" # Check if the session exists, discarding output # We can check $? for the exit status (zero for success, non-zero for failure) tmux has-session -t $session 2>/dev/null if [ $? != 0 ]; then # Set up your session fi # Attach to created session tmux attach-session -t $session
has-session [-t target-session] (alias: has) Report an error and exit with 1 if the specified session does not exist. If it does exist, exit with 0.