Comment diviser une nouvelle fenêtre et exécuter une commande dans cette nouvelle fenêtre en utilisant tmux?

28

j'ai essayé

tmux -c "shell command" split-window

mais cela ne semble pas fonctionner.

En utilisant tmux split-window, on peut diviser une nouvelle fenêtre.

MISE À JOUR :

L'utilisation tmux split-window 'exec ping g.cn'peut exécuter la commande ping, mais une fois arrêtée, la nouvelle fenêtre sera fermée.

atupal
la source
4
man tmux | less -p remain-on-exit...
jasonwryan

Réponses:

38

Utilisation:

tmux split-window "shell command"

La split-windowcommande a la syntaxe suivante:

 split-window [-dhvP] [-c start-directory] [-l size | -p percentage] [-t
         target-pane] [shell-command] [-F format]

(extrait de la man tmuxsection "Fenêtres et volets"). Notez que l'ordre est important - la commande doit venir après l' une des options précédentes qui apparaissent, et elle doit être un seul argument, vous devez donc la citer si elle a des espaces.


Pour des commandes comme ping -ccelle-ci qui se terminent rapidement, vous pouvez d'abord définir l' remain-on-exitoption:

tmux set-option remain-on-exit on
tmux split-window 'ping -c 3 127.0.0.1'

Le volet restera ouvert une fois pingterminé, mais sera marqué "mort" jusqu'à ce que vous le fermiez manuellement.

Si vous ne souhaitez pas modifier les options globales, il existe une autre approche. La commande est exécutée avec sh -c, et vous pouvez l'exploiter pour que la fenêtre reste vivante à la fin:

tmux split-window 'ping -c 3 127.0.0.1 ; read'

Ici, vous utilisez la readcommande shell pour attendre une nouvelle ligne saisie par l'utilisateur une fois la commande principale terminée. Dans ce cas, la sortie de la commande restera jusqu'à ce que vous appuyiez sur Enterdans le volet, puis elle se fermera automatiquement.

Michael Homer
la source
Merci Michawl Homer :-). Je l'ai aussi trouvé tout à l'heure /. Mais comment garder la nouvelle fenêtre fermée?
atupal
@atupal: Voir éditer - soit définir, remain-on-exitsoit utiliser cmd ; read.
Michael Homer
2

bash --rcfile

Cette technique ouvre un nouveau shell, exécute des commandes et vous y laisse une fois les commandes terminées:

tmux-split-cmd() ( tmux split-window -dh -t $TMUX_PANE "bash --rcfile <(echo '. ~/.bashrc;$*')" )
tmux-split-cmd 'cd; pwd; ping google.com'

Ou si la commande n'a pas de caractères terminaux spéciaux comme ;simplement:

tmux-split-cmd ping google.com

Cela utilise:

Une autre variante intéressante est:

tmux-split-cmd-uniq() (
  if [ "$(tmux list-panes | wc -l | cut -d' ' -f1)" -ne 1 ]; then
    tmux kill-pane -t 1
  fi
  tms "$@"
)

ce qui tue la division précédente si elle existe déjà et aide à ne garder qu'une seule division supplémentaire à tout moment.

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
la source