Пусть tmux подождет, пока я войду в SSH, чтобы завершить оставшуюся часть сценария Tmuxinator

13

После недавнего открытия tmux и Tmuxinator я пытался настроить среду разработки для использования.

Согласно протоколу, мы не можем хранить пароли / парольные фразы в скриптах. Итак, что я ищу, так это ожидание, пока tmux будет ждать установки SSH-туннеля (введен пароль, нажмите Enter и войдите в систему).

Я знаю, что в tmux 1.8+ есть команда ожидания. Я бегу 1.9a через Cygwin. Но даже несмотря на то, что я перечитал документацию, мне просто трудно понять это.

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 user@example.com' C-m

Итак, вот очень простая версия того, что у меня есть.

Мысли? Я знаю, что могу синхронизировать сеансы, я до сих пор работаю над этим.

Изменить : Просмотр команд и перетаскивание переменных из панели в команду из синхронизированных панелей. Это может быть «лучшим» способом, пока я не пойму, как заставить TMUX запросить у меня ввод пользователя.

Может выпустить запрос функции.

Танго браво
источник
2
Почему бы вам не подключиться без пароля и использовать открытый / закрытый ключ?
YoMismo
Мне сказали, что я не могу подключиться таким образом. Хотя технически я мог , это не приемлемо с политикой, которая была введена в действие. У меня также нет голоса / полномочий для внесения этих изменений (быстро?). Так что в моем случае, при исследовании дорог с наименьшим сопротивлением, это кажется многообещающим.
Танго Браво
1
Я так понимаю, что на удаленном компьютере не установлен tmux? В противном случае было бы намного лучше зайти в удаленный ящик по ssh и только потом запускать tmux. // Кроме того , я хотел бы предложить , что вы используете ваш ~/.ssh/configфайл: положить Host foo, User userи Hostname example.comна трех последовательных строк в файле конфигурации. Тогда ssh fooстановится эквивалентным ssh user@example.com. // Может быть, что-то вроде этого тоже поможет:command-prompt -p 'log in as:' -I 'user@example.com' 'split-window -v -d %1; split-window -v -d %1'
Дэмиен

Ответы:

3

Некоторые заметки wait-for

Таким образом, базовое использование wait-for не слишком сложно, если вы считаете его аналогом потоковых примитивов параллелизма

На самом деле это не связано с другими функциями tmux, просто удобная реализация IPC.

wait-for event_nameэто как ожидание события, wait-for -S event_name средство оповещения о событии

-UИ -Lварианты рода ортогональны и действовать , как семафоры

Решение вашего вопроса напрямую

Вы можете решить эти виды условий гонки, wait-forно только если команды являются синхронными.

tmux send-keys 'sync-command ; tmux wait-for -S command-finished' C-m
tmux wait-for command-finished

Проблема, с которой вы столкнулись, заключается в том, что команда ssh не является синхронной: вы не можете сказать, когда она закончилась.

Просматривая руководство, мы можем найти LocalCommandдирективу, которая, кажется, делает то, что мы хотим: выполнить команду локально после завершения соединения, чтобы мы могли вызвать

ssh root@iris.tatw.name -o 'PermitLocalCommand yes' -o 'LocalCommand  tmux wait-for -S done'
Att Righ
источник
Таким образом, под «не связан с другими функциями» вы подразумеваете, что channelэто просто имя в своем собственном пространстве имен и не связано с предопределенными «событиями» tmux?
ormaaj
Возможно, возникнут проблемы с гонкой, если wait-for -Sони не гарантируют доставку сообщений и sync-commandфиниширование раньше wait-for.
ormaaj