Come dividere una nuova finestra ed eseguire un comando in questa nuova finestra usando tmux?


28

Ho provato

tmux -c "shell command" split-window

ma non sembra funzionare.

Usando tmux split-window, si può dividere una nuova finestra.

AGGIORNAMENTO :

L'uso tmux split-window 'exec ping g.cn'può eseguire il comando ping, ma quando viene interrotto la nuova finestra verrà chiusa.


4
man tmux | less -p remain-on-exit...
Jasonwryan,

Risposte:


38

Uso:

tmux split-window "shell command"

Il split-windowcomando ha la sintassi seguente:

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

(dalla man tmuxsezione "Finestre e riquadri"). Si noti che l'ordine è importante: il comando deve venire dopo una qualsiasi di quelle opzioni precedenti che appaiono e deve essere un singolo argomento, quindi è necessario citarlo se ha spazi.


Per comandi come ping -cquello terminano rapidamente, puoi prima impostare l' remain-on-exitopzione:

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

Il riquadro rimarrà aperto al pingtermine, ma sarà contrassegnato come "morto" fino a quando non verrà chiuso manualmente.

Se non si desidera modificare le opzioni generali, esiste un altro approccio. Il comando viene eseguito con sh -ce puoi sfruttarlo per rendere la finestra viva alla fine:

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

Qui si utilizza il readcomando shell per attendere una newline di input dell'utente al termine del comando principale. In questo caso, l'output del comando rimarrà finché non si preme Enternel riquadro, quindi si chiuderà automaticamente.


Grazie Michawl Homer :-). L'ho trovato anche solo ora /. Ma come mantenere chiusa la nuova finestra?
Atupal,

@atupal: vedi modifica - imposta remain-on-exito usa cmd ; read.
Michael Homer,

2

bash --rcfile

Questa tecnica apre una nuova shell, esegue i comandi e ti lascia lì al termine dei comandi:

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

O se il comando non ha caratteri terminali speciali come ;solo:

tmux-split-cmd ping google.com

Questo utilizza:

Un'altra variante interessante è:

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

che uccide la divisione precedente se esiste già e aiuta a mantenere solo una divisione aggiuntiva in ogni momento.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.