Como dividir uma nova janela e executar um comando nesta nova janela usando o tmux?

23

Eu tentei

tmux -c "shell command" split-window

mas parece que não funciona.

Usando tmux split-window , pode-se dividir uma nova janela.

UPDATE :

Usar tmux split-window 'exec ping g.cn' pode executar o comando ping, mas quando for interrompido, a nova janela será fechada.

    
por atupal 29.08.2014 / 09:53

2 respostas

30

Uso:

tmux split-window "shell command"

O comando split-window tem a seguinte sintaxe:

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

(de man tmux , seção "Janelas e painéis") . Note que a ordem é importante - o comando tem que vir após qualquer uma das opções anteriores que aparecem, e tem que ser um único argumento, então você precisa citá-lo se tiver espaços.

Para comandos como ping -c que terminam rapidamente, você pode definir a opção remain-on-exit primeiro:

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

O painel permanecerá aberto depois que ping terminar, mas será marcado como "morto" até que você o feche manualmente.

Se você não quiser alterar as opções gerais, há outra abordagem. O comando é executado com sh -c e você pode explorar isso para que a janela permaneça ativa no final:

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

Aqui, você usa o comando read do shell para aguardar um usuário input newline depois que o comando principal terminar. Neste caso, a saída do comando permanecerá até que você pressione Enter no painel e, em seguida, fechará automaticamente.

    
por 29.08.2014 / 10:01
2

bash --rcfile

Esta técnica abre um novo shell, executa comandos e deixa você lá depois que os comandos terminam:

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

Ou se o comando não tiver caracteres de terminal especiais como ; just:

tmux-split-cmd ping google.com

Isso usa:

Outra 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 "$@"
)

que mata a divisão anterior, se já existir, e ajuda a manter apenas uma divisão extra em todos os momentos.

    
por 19.03.2018 / 16:09

Tags