Después de descubrir recientemente tmux y Tmuxinator, he estado tratando de configurar un entorno de desarrollo para usar.
Por protocolo, no podemos almacenar contraseñas / frases de contraseña en scripts. Entonces, lo que estoy buscando es esperar a que tmux espere a que se configure el túnel SSH (contraseña suministrada, ingresar presionada e iniciar sesión).
Sé que hay un comando "esperar" en tmux 1.8+. Estoy ejecutando 1.9a a través de Cygwin. Pero a pesar de que he leído la documentación, me está costando entenderla.
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
Entonces, aquí hay una versión muy simple de lo que tengo.
Pensamientos? Sé que puedo sincronizar sesiones, todavía estoy resolviendo los problemas en esto.
Editar : Buscar comandos y extraer variables del panel al comando desde paneles sincronizados. Esta podría ser una "mejor" forma de hacerlo, hasta que pueda descubrir cómo hacer que TMUX me solicite la entrada del usuario.
Podría emitir una solicitud de función.
~/.ssh/config
archivo: putHost foo
,User user
yHostname example.com
en tres líneas consecutivas en el archivo de configuración. Entonces sessh foo
convierte en equivalente assh [email protected]
. // Quizás algo como esto también ayude:command-prompt -p 'log in as:' -I '[email protected]' 'split-window -v -d %1; split-window -v -d %1'
Respuestas:
Algunas notas de
wait-for
Por lo tanto, el uso básico de esperar no es demasiado complicado si lo considera análogo a las primitivas de concurrencia de subprocesos
No está realmente conectado a otra funcionalidad tmux, solo una implementación conveniente de IPC.
wait-for event_name
es como esperar un eventowait-for -S event_name
es un medio de señalizar un eventoLas opciones
-U
y-L
son ortogonales y actúan como semáforos.Dirigiendo su pregunta directamente
Puede resolver este tipo de condición de carrera
wait-for
pero solo si los comandos son sincrónicos.El problema que tiene aquí es que el comando ssh no es síncrono: no puede saber cuándo ha terminado.
Mirando el manual podemos encontrar la
LocalCommand
directiva que parece hacer lo que queremos: ejecutar un comando localmente después de que la conexión haya finalizado para que podamos llamarfuente
channel
es solo un nombre en su propio espacio de nombres y no está relacionado con los "eventos" predefinidos de tmux?wait-for -S
no garantiza la entrega del mensaje y lossync-command
acabados anterioreswait-for
.