Comment démarrer tmux avec plusieurs fenêtres dans différents répertoires?

je veux utiliser un script pour ouvrir une session tmux avec 6 fenêtres, chacune dans un répertoire différent. J'ai commencé avec un script que j'ai trouvé et j'ai essayé cette première:

tmux new-session -s xyz   -n etc -d 'cd /etc'
tmux new-window  -t xyz:1 -n var    'cd /var/log'

Mais j'ai vite découvert que cela ne fonctionne pas comme prévu, la fenêtre sera fermée après la commande shell se termine.

donc mon idée suivante était de lancer un nouveau shell comme ceci:

tmux new-session -s xyz   -n etc -d 'cd /etc; bash -i'
tmux new-window  -t xyz:1 -n var    'cd /var/log; bash -i'
tmux new-window  -t xyz:2 -n var2   'cd /var/log; bash -i'
tmux new-window  -t xyz:3 -n var3   'cd /var/log; bash -i'
tmux new-window  -t xyz:4 -n var4   'cd /var/log; bash -i'
tmux new-window  -t xyz:5 -n var5   'cd /var/log; bash -i'
tmux new-window  -t xyz:6 -n var6   'cd /var/log; bash -i'

tmux select-window -t xyz:1
tmux -2 attach-session -t xyz

Cela fonctionne presque. Mais si je démarre plus de 4 fenêtres, je vois souvent les erreurs bash suivantes dans l'une des fenêtres après le démarrage:

bash: [: =: unary operator expected
bash: [: too many arguments
bash: [: =: unary operator expected
bash: [: =: unary operator expected
bash: [: =: unary operator expected
bash: [: =: unary operator expected
bash: [: too many arguments
bash: [: =: unary operator expected
bash: [: =: unary operator expected
bash: [: =: unary operator expected
bash: [: =: unary operator expected
bash: [: =: unary operator expected

Je ne sais pas pourquoi cela arrive, mais je pense toujours que je ne fais pas ça bien. Y a-t-il une meilleure façon de configurer une session tmux sur plusieurs répertoires?

29
demandé sur Ben Klein 2011-12-16 20:30:16

5 réponses

les erreurs shell sont probablement dues à un problème dans vos fichiers de démarrage (ou quelque chose qu'ils exécutent).

comme le commente shellter, incluant temporairement la commande set -vx au début de votre séquence de démarrage est un bon moyen de trouver d'où les erreurs se produisent.

Si vous trouvez le -vx sortie trop verbeuse, vous pouvez essayer "printf debugging" (ajouter manuellement des déclarations de débogage à vos fichiers de démarrage jusqu'à ce que vous puissiez préciser exactement quelles lignes sont à l'origine de la les erreurs):

  • echo start of .bashrc et echo end of .bashrc au début/à la fin de votre .bashrc pour voir si l'erreur se produit pendant votre .bashrc. Si non, l'instrument de vos fichiers de démarrage: .bash_profile/.bash_login/.profile. Si les erreurs se produisent avant ce fichier, alors le problème peut être dans /etc/profile.
  • une fois que vous savez quel fichier est traité lorsque les erreurs se produisent, ajoutez plus de sorties de débogage autour de chaque "bloc principal" ou ligne pour réduire la liste des responsables section/ligne.
  • Les erreurs ne peuvent être réellement dans votre fichier de démarrage lui-même, mais dans un script qu'il exécute.

Note: ces ajouts de débogage doivent être temporaires car ils causeront des problèmes si vous utilisez un programme qui fait des logins automatisés (e.g. rsync, accès Git basé sur SSH, etc.) puisque ces programmes s'attendent à une connexion" propre " sans qu'un tel bruit de débogage soit présent.


il ne devrait pas être nécessaire d'utiliser cd commande comme ça dans le shell-command argument donné à tmux new-session ou tmux new-window.

Une nouvelle fenêtre "héritent" le répertoire de travail courant lorsque vous utilisez new-session et new-window à partir de la ligne de commande (c'est à dire lorsqu'elles sont faites par le tmux binaire, au lieu de via une reliure ou à un tmux -: invite de commandes). Selon le fichier CHANGES, il semble que ce soit le cas depuis tmux 0.6 (à moins pour new-window).

C'est tmux