tmux new-window - aguarde até a sessão acabar?

1

Eu estou fazendo o seguinte (este é apenas um exemplo, as vírgulas são mais complexas):

xterm -fa "Inconsolata" -e tmux new-session -s alpha &
disown %%
tmux new-window -t alpha bash
tmux new-window -t alpha zsh 

... que funciona perfeitamente quando eu digito no terminal, me dando um xterm com uma sessão tmux com três janelas. MAS se eu colocar a coisa em um script, ela irá parar de trabalhar;

 no server running on /tmp/tmux-1153/default
 no server running on /tmp/tmux-1153/default

erro e apenas uma janela na nova tmux session alpha .

Depois de algumas experiências, descobri que irá funcionar novamente se adicionar uma

sleep 5

(ou similar) entre o comando disown e o tmux new-window . Claramente, o xterm não terminou a configuração antes que este comando seja executado e, portanto, tmux new-window é executado antes que a sessão seja criada, a menos que eu coloque um atraso lá.

Funciona, mas não é elegante. Existe uma maneira de informar tmux para esperar até que a sessão alpha esteja ativa?

    
por Rmano 01.07.2016 / 09:07

1 resposta

2

Você pode fazer isso de duas maneiras:

  1. Use o método sleep . Não vejo nada de errado em usar sleep , às vezes, se você escolher um tempo muito curto. Para enganar, use

    while ! tmux has-session; do sleep 1; done
    

    ou

    while ! tmux has-session -t alpha; do sleep 1; done
    
  2. Use algo como xtoolwait que inicia um cliente X (seu emulador de terminal) em segundo plano e retorna quando mapeou sua janela.

Se você escolher a segunda opção (que pode ser melhor), lembre-se de remover o & no final do comando, iniciando seu terminal, e também se torna desnecessário para disown do trabalho.

O comando se torna:

xtoolwait xterm -fa "Inconsolata" -e tmux new-session -s alpha
tmux new-window -t alpha bash

Se o xtoolwait ainda não estiver instalado no seu Unix, ele provavelmente estará disponível como um pacote (ele está disponível há idades ). Use o gerenciador de pacotes de sua preferência para instalá-lo.

EDITAR : Nos comentários, parece que tmux demora muito para aparecer depois que o terminal mapeou sua janela, mesmo se xtoolwait estiver sendo usado. Então, nessa situação, eu iria com o loop de uma chamada sleep 1 até que a sessão tmux desejada existisse.

    
por 01.07.2016 / 09:17