Je souhaite donc créer une session tmux
spécifique au projet qui affiche certaines commandes dans certains volets de manière automatique. Après un tutoriel en ligne et la page de manuel tmux
, voici ce que je propose pour un fichier de configuration:
new -n estruct ls
neww -n estruct2 ls
splitw -v -p 50 -t 0 ls
Le résultat est ... rien. tmux
démarre avec une seule fenêtre et un seul volet dans cette fenêtre sans aucune commande exécutée.
Comment pourrais-je créer un fichier de configuration qui me permette de créer un ensemble de fenêtres et de volets avec certaines commandes pré-exécutées?
Votre fichier de configuration fonctionne, mais il y a quelques complications.
Tout d’abord, les commandes que vous démarrez (les instances de ls ) s’exécutent très rapidement. Les fenêtres et les volets des commandes sont créés, mais ils disparaissent dès que chaque commande est fermée.
Si votre objectif est d’utiliser réellement de telles commandes "uniques" dans votre configuration éventuelle, vous devriez probablement utiliser l’option de fenêtre remain-on-exit
(et éventuellement l’option de session set-remain-on-exit
pour fournir une valeur par défaut à toutes les fenêtres créées dans la session). Lorsque remain-on-exit
est défini pour une fenêtre, celle-ci ne disparaît pas à la fermeture de la commande. Vous voudrez probablement mapper le respawn-window
à une clé (remarque: respawn-window
réapparaîtra la commande d'origine; respawn-pane
est également disponible dans tmux 1.5 pour réapparaître des volets individuels. ).
bind-key R respawn-window
# set global r-o-e so that initial window of initial session gets it
set -g set-remain-on-exit on
# create a session and its windows/panes
new -n estruct ls
neww -n estruct2 ls
splitw -v -p 50 -t 0 ls
# restore global r-o-e
set -g set-remain-on-exit off
# let session r-o-e inherit from global value for future windows
set -u set-remain-on-exit
Ou bien, si votre fenêtre initiale ne vous dérange pas du numéro 1 au lieu du numéro 0, nous pouvons éviter de modifier la valeur globale:
bind-key R respawn-window
# create a session with a throw-away window
new true
# for future windows, stay open after the command exits
set set-remain-on-exit on
# create the windows we really want
neww -n estruct ls
neww -n estruct2 ls
splitw -v -p 50 -t 0 ls
# for future windows, revert r-o-e to global value
set -u set-remain-on-exit
Si vous utilisiez uniquement ls
comme commande d'espace réservé simplifié et que vous avez réellement l'intention de générer un type de commande interactive dans vos fenêtres/volets, vous devriez probablement simplement générer la commande que vous avez l'intention d'exécuter. Si votre commande prévue met trop de temps à démarrer pour pouvoir l’utiliser pendant les tests tmux , remplacez-la par un shell ou une autre commande interactive simple (par exemple, top
, sqlite3
, etc.). .).
new-session
est la commande par défautDeuxièmement, exécuter tmux sans argument de commande (par exemple, tmux
) équivaut à utiliser la commande new-session
(c.-à-d. tmux
est identique à tmux new-session
). Votre .tmux.conf
crée une session pour ses fenêtres/volets (new
est un alias pour new-session
) et une autre session est en cours de création pour la commande implicite new-session
spécifiée en démarrant tmux sans argument de commande. Si vous utilisez la barre d'état par défaut, vous verrez un [1]
dans le côté gauche de la barre d'état lorsque vous êtes dans la session "extra" (la session initiale créée dans le .tmux.conf
est le numéro 0).
Si vous souhaitez éviter de créer la session supplémentaire, utilisez tmux attach
au lieu de plain tmux
. Les commandes de votre .tmux.conf
seront exécutées lors de la création de la session 0, puis votre client s’attachera à cette session au lieu d’en créer une nouvelle.
Je ne suis pas sûr de comprendre ce que vous entendez par "entrer manuellement", mais c'est comme cela que je le fais. J'ai écrit un script de "démarrage automatique" que mon gestionnaire de fenêtres lance. Il contient:
tmux start-server
for i in ~/sessions_tmux/*.session; do "$i"; done
où chaque fichier .session ressemble à ceci:
#!/bin/bash
SESSION_NAME="flaskr_tutorial"
if [[ ! -z "$TMUX" ]] || [[ ! -z "$TMUX_PANE" ]]; then
echo "Already inside a tmux session, do not know what to do"
exit 1
fi
tmux -q has-session -t "$SESSION_NAME"
if [ $? ]; then
exit 0
fi
NEWCWD=~/projects/flaskr/
( cd "${NEWCWD}"; tmux new-session -d -s "$SESSION_NAME" )
tmux send-keys -t "$SESSION_NAME" 'vim flaskr.py' Enter
( cd "${NEWCWD}"; tmux split -h -t "$SESSION_NAME" )
tmux send-keys -t "$SESSION_NAME" 'Sudo tail -F -n 100 /var/log/messages | ccze' Enter
Attendez, il y a plus! J'ai un nombre croissant de fichiers .session que je charge avec konsole:
konsole --background-mode --profile Shell --tabs-from-file ~/sessions_tmux/work_console.tabs
où work_console.tabs ressemble à ceci:
.
.
.
title: projectx;; command: tmux attach -t projectx
title: flaskr;; command: tmux attach -t flaskr_tutorial
.
.
.
Ensuite, j'appuie sur F12 pour lancer la konsole.
supposons que vous souhaitiez lancer 3 tâches de surveillance du serveur (ici, ping sur localhost), vous n'avez pas besoin de manipuler les fichiers de configuration et les sessions enregistrées. Tout peut être fait à partir de la ligne de commande.
tmux new-session 'ping 127.0.0.1' \; \
split-window 'ping 127.0.0.1' \; \
split-window 'ping 127.0.0.1' \; \
select-layout even-vertical
J'ai trouvé teamocil très utile pour automatiser les fenêtres/sessions de tmux.
Son écrit en Ruby donc vous avez besoin que installé.
Voici un exemple de configuration:
session:
name: 'my project'
windows:
-name: vim
root: '~/code/my_project'
splits:
- cmd: vim
- cmd: guard
Vous pouvez avoir un arrangement de fenêtres et de fractionnements.
**
** J'ai constaté que pour un administrateur paresseux comme moi, je préférerais sauvegarder la session de tmux plutôt que de passer des heures à essayer de la construire parfaitement. J'administre plus de 30 serveurs et mes sessions tmux sont dynamiques, la configuration changeant tout le temps. C’était douloureux, jusqu’à ce que j’ai récemment découvert tmux-resurrect , ce plugin est tout simplement génial. Essaie. Actuellement, les dépôts Ubuntu ont tmux 1.8, ce plugin a besoin de 1.9, vous aurez donc besoin de mettre à jour manuellement
Sudo apt-get install python-software-properties software-properties-common
Sudo add-apt-repository ppa:pi-rho/dev
Sudo apt-get update
Sudo apt-get install tmux=2.0-1~ppa1~t
Après quoi, vous pouvez l'installer en
git clone https://github.com/tmux-plugins/tmux-resurrect ~/clone/path
Puis dd cette ligne au bas de ~/.tmux.conf (si ~/.tmux.conf n’est pas disponible, créez un fichier vide)
run-Shell ~/clone/path/resurrect.tmux
J'ajoute également cette ligne à la fin du fichier ~/.tmux.conf afin que le plug-in enregistre les sessions de tous les programmes que je lance.
set -g @resurrect-processes ':all:'
Rechargez ensuite l'environnement tmux.
tmux source-file ~/.tmux.conf
C'est tout! Vous avez terminé. Maintenant, lancez tmux comme d'habitude, redimensionnez vos panneaux, créez-en de nouveaux, créez de nouvelles sessions, etc. Lorsque vous êtes satisfait de la configuration que vous avez atteinte (dans plusieurs fenêtres et plusieurs sessions), cliquez simplement sur ctrl + b, puis sur ctrl + s pour enregistrer la session. Afin de tester les résultats, il suffit de tuer tous les tmux
killall tmux
Ensuite, relancez tmux
tmux
Ensuite, à partir de tmux, cliquez sur ctrl + b, puis sur Ctrl + r (pour restauration). Comme par magie, toutes vos fenêtres, volets et sessions sont restaurés avec la même géométrie et le même agencement. J'espère que cela aiderait.
Une autre alternative similaire à teamcoil est tmuxinator , elle est en développement actif et fonctionne assez bien. Il est également recommandé (et en quelque sorte révisé) sur l’étonnant tmux: Développement productif sans souris de de The Pragmatic Bookshelf .