Como executar um comando ao executar uma sessão de soquete tmux?

1

Então, digamos, por exemplo, eu preciso executar um soquete tmux entre dois usuários que executam

echo foo

Para fazer isso rodar em um tmux normal, seria melhor fazer tmux new -d -s Foo "echo foo"

No entanto, ao executar o tmux usando -S, não consigo encontrar uma maneira de executar automaticamente um comando quando a sessão é iniciada. Digamos que nosso caminho seja / home / user / tmux

Eu exibi tmux -S /home/user/tmux e, em seguida, outra conta tmux -S /home/user/tmux attach . No entanto, isso não deixa uma oportunidade para especificar um comando inicial. De alguma forma eu poderia fazer isso?

Obrigado.

    
por TGWaffles 30.01.2017 / 18:36

1 resposta

1

Portanto, uma abordagem é gerar uma nova janela e, em seguida, anexar:

tmux -S /tmp/socket new-window -n vi /usr/bin/vi
tmux -S /tmp/socket attach

Assim, o cliente pode criar uma nova janela e, em seguida, conectar-se a ela.

No entanto, suspeito que uma sessão do tmux pode não estar fazendo o que você deseja fazer.

A razão pela qual attach não tem comando é porque uma sessão representa uma visão do que é visto atualmente na tela, que é compartilhado entre todos os clientes conectados. Então, anexar um comando é um pouco estranho. Todos os clientes verão a mesma coisa, e a chamada new-window mudará a visualização de todos os clientes conectados.

Se você quiser compartilhar uma coleção de janelas (por exemplo, exibições de programas em execução), mas cada cliente tiver uma visualização distinta, será necessário criar sessões. Você pode usar o argumento -t para new-session para fazer uma sessão que compartilhe suas janelas com outra sessão. Aparentemente, você não pode usar -t junto com um comando para a nova sessão, que na verdade é um caso de uso válido, portanto, você acaba usando o sinalizador -d e, em seguida, gerando o comando. Para tornar as coisas ainda mais irritantes, parece que new-window não possui um argumento de sessão, então você confia na ordem em que as coisas são chamadas!

tmux -S /tmp/socket new-session -s base  # run once

# For each client
tmux -S /tmp/socket new-session -t client-view -d 
tmux -S /tmp/socket new-window /usr/bin/vi
tmux -S /tmp/socket attach -t client-view

Isso é tudo um pouco de kludge eu consegui usar esse tipo de abordagem efetivamente por vários anos. (Cada uma das minhas janelas de terminal é uma visão distinta em uma sessão compartilhada do tmux).

Você pode estar interessado neste script link que envolve tudo isso em um único script de shell .

    
por 11.02.2017 / 10:20

Tags