Comment faire pour 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 a été de commencer 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 commence à plus de 4 windows, j'ai souvent voir la suite de bash erreurs dans l'un de la windows 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 n'ai aucune idée de pourquoi cela arrive, mais je pense toujours que je ne fais pas ce droit. Est-il un meilleur moyen de mettre en place une session tmux sur plusieurs répertoires?
- Il est probable qu'une partie non cotées variable .bashrc ou similaire qui est la production des espaces variables. Si vous avez un code comme
if [[ -f ${file} ]] ; ...
et file="nom de fichier w espaces", cela permettra de sauter les choses (de la même pour toutes les variables, et pas seulement de fichier vars).set -vx
est votre ami. Bonne chance. - Merci, vous semblez être de droite. Une ligne offensive dans mon
.bashrc
semble être[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
. Si j'en commentaire, l'erreur disappars. Même si je ne comprends toujours pas ce que le problème est vraiment: Cela n'arrive que dans 1 cas sur 6 windows. Et pas même chaque fois que je créer la session tmux. - hm... c'est pas le genre de l'espace que j'étais en train de penser, qui n'est pas la valeur d'une variable, mais une substitution de commande c'est à dire
$(SHELL....)
et les espaces sont OK. Alors... souvent un guillemet manquant (simple ou double) au-dessus de la ligne qui apparaît comme une erreur de causer des problèmes de ce genre. Si vous vous souciez de votre post .bashrc pour coller bin et d'éditer votre message avec un lien à elle, nous pouvons probablement résoudre ce problème. Bonne chance. - Eh bien, c'est la valeur par défaut
.bashrc
de Ubuntu Oneiric, voir ici. Donc rien de spécial.
Vous devez vous connecter pour publier un commentaire.
Le shell erreurs sont probablement dû à un problème dans vos fichiers de démarrage (ou quelque chose qu'ils exécuter).
Comme shellter commenté, temporairement, y compris la commande
set -vx
tôt dans votre séquence de démarrage est un bon moyen de trouver d'où les erreurs se produisent.Si vous trouvez le
-vx
de sortie trop verbeux, vous pouvez essayer de “printf débogage” (ajout manuel d'instructions de débogage de vos fichiers de démarrage jusqu'à ce que vous pouvez préciser exactement quelles lignes sont à l'origine des erreurs):echo start of .bashrc
etecho end of .bashrc
au début/à la fin de votre.bashrc
pour voir si l'erreur se produit au cours de votre.bashrc
. Si non, l'instrument de vos fichiers de démarrage:.bash_profile
/.bash_login
/.profile
. Si des erreurs se produisent avant que le fichier, puis le problème peut être dans/etc/profile
.Remarque: Ces debug ajouts doivent être temporaire, car ils vont causer des problèmes si jamais vous utilisez un programme qui le rend automatisé des connexions (par exemple, rsync, SSH à base de Git d'accès, etc.) puisque ces programmes s'attendre à un “nettoyage” de la connexion sans débogage bruit présent.
Il devrait y avoir aucun besoin d'utiliser
cd
commande comme ça dans la de commande shell argument àtmux new-session
outmux new-window
.Une nouvelle fenêtre “héritent”† le répertoire de travail courant lors de l'utilisation de
new-session
etnew-window
à partir de la ligne de commande (c'est à dire lorsqu'elles sont faites par letmux
binaire, plutôt que par l'intermédiaire d'une liaison ou à un tmux-:
l'invite de commandes). Selon les MODIFICATIONS de fichier, il ressemble à ce qui a été le cas depuis tmux 0.6 (au moins pournew-window
).† C'est tmuxmédiation de l'héritage, non pas le parent–enfant à l'héritage qui est le mécanisme habituel de passer le long de la mdc.
Ce script fonctionne pour moi avec tmux 1.5:
Cela peut aussi (comme un effet secondaire) d'alléger votre démarrage du shell erreurs depuis le moyen tmux lance un shell est différente d'une plaine
bash -i
(il est plus proche de labash -l
, qui utilise votre.bash_profile
/.bash_login
/.profile
au lieu de (seulement) de votre.bashrc
).default-path
option n'est pas disponible dans tmux passé de 1,8. Il avait été retiré en faveur de l'utilisation de la-c
drapeau - par exempletmux new-window -t "$sn:$i" -c "/some/path"
Tmuxinator est également très bon pour cela. En gros, vous créez des fichiers de configuration comme suit:
Ensuite, vous pouvez démarrer une nouvelle session avec:
Je l'ai utilisé pendant un certain temps et ont eu une bonne expérience pour la plupart.
Vous pouvez utiliser Teamocil à la place. Teamocil est un simple outil qui permet de créer automatiquement des sessions, des fenêtres et des volets dans tmux avec les fichiers YAML.
Pour les milliers qui ne sont pas d'installer rubytmuxp est disponible en Python et prend en charge les Teamocil et Tmuxinator style les fichiers de configuration (dans les deux yaml et json).Pour ne pas mentionner il est très doux de la bibliothèque, derrière tout https://github.com/tony/libtmux
ajouter ~/.local/bin/pour votre $PATH pour python utilisateur d'installer des programmes
-
-
Je ne pouvais pas pour la vie de moi -c pour le travail, j'ai donc travaillé autour de ce par la création d'un script qui est exécuté via envoyez - cela me permet de faire ce que je veux dans chaque session tmux. Dans le cas où il aide à quelqu'un d'autre, c'est ici:
tmux send -t "$TMUX_SESSION:$WINDOW" . ' ' $SCRIPT ENTER
pour obtenir le processus parent à l'égard de la modification du répertoire.