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

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

По протоколу нам не разрешается хранить пароли / парольные фразы в сценариях. Так что я ищу – ждать, пока tmux ждет, пока туннель SSH не будет настроен (пароль предоставляется, вводится нажатым и вошел в систему).

Я знаю, что в 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' Cm 

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

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

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

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

Некоторые заметки о 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' Cm tmux wait-for command-finished 

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

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

 ssh root@iris.tatw.name -o 'PermitLocalCommand yes' -o 'LocalCommand tmux wait-for -S done'