Depois de descobrir recentemente o tmux e o Tmuxinator, tentei configurar um ambiente de desenvolvimento para usar.
Por protocolo, não temos permissão para armazenar senhas / frases secretas em scripts. Então, o que eu estou procurando é uma espera para o tmux aguardar a configuração do túnel SSH (senha fornecida, pressione Enter e faça login).
Eu sei que há um comando "espera por" no tmux 1.8+. Estou executando o 1.9a via Cygwin. Mas mesmo que eu tenha lido a documentação, estou tendo dificuldades para entendê-la.
tmux new-session -s development -n editor -d
tmux split-window -v
tmux split-window -v
"Need to send to all panes.
tmux send-keys -t development 'ssh [email protected]' C-m
Então, aqui está uma versão muito simples do que eu tenho.
Pensamentos? Eu sei que posso sincronizar sessões, mas ainda estou trabalhando nisso.
Editar : Examinar comandos e puxar variáveis do painel para o comando dos painéis sincronizados. Essa pode ser uma maneira "melhor", até que eu possa descobrir como fazer com que o TMUX me solicite a entrada do usuário.
Pode emitir uma solicitação de recurso.
~/.ssh/config
arquivo: putHost foo
,User user
eHostname example.com
em três linhas consecutivas no arquivo de configuração. Entãossh foo
se torna equivalente assh [email protected]
. // Talvez algo assim ajude também: #command-prompt -p 'log in as:' -I '[email protected]' 'split-window -v -d %1; split-window -v -d %1'
Respostas:
Algumas notas de
wait-for
Portanto, o uso básico de espera não é muito complicado se você pensar nisso como análogo a segmentar primitivas de simultaneidade
Não está realmente conectado a outras funcionalidades do tmux, apenas uma implementação conveniente do IPC.
wait-for event_name
é como esperar por um eventowait-for -S event_name
é um meio de sinalizar um eventoAs opções
-U
e-L
são ortogonais e agem como semáforosDirigindo sua pergunta diretamente
Você pode resolver esses tipos de condição de corrida com
wait-for
mas apenas se os comandos forem síncronos.O problema que você tem aqui é que o comando ssh não é síncrono: você não pode dizer quando ele terminou.
Examinando o manual , podemos encontrar a
LocalCommand
diretiva que parece fazer o que queremos: execute um comando localmente depois que a conexão terminar, para que possamos chamarfonte
channel
é apenas um nome em seu próprio espaço de nome e não relacionado aos "eventos" predefinidos do tmux?wait-for -S
não garantir a entrega da mensagem e ossync-command
acabamentos anterioreswait-for
.