Дозвольте tmux почекати, поки я SSH, щоб завершити решту сценарію Tmuxinator


13

Нещодавно виявивши 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' C-m

Отже, ось дуже проста версія того, що я маю.

Думки? Я знаю, що можу синхронізувати сеанси, я все ще опрацьовую перевага в цьому.

Редагування : перегляд команд та витягування змінних з панелі до команди із синхронізованих панелей. Це може бути "кращим" способом, поки я не зможу зрозуміти, як отримати TMUX, щоб запросити мене на введення користувача.

Можна надіслати запит на функцію.


2
Чому ви не підключитесь без пароля та не користуєтесь відкритим / приватним ключем?
YoMismo

Мені сказали, що я не можу так з'єднатися. Хоча я технічно міг би це зробити, це не прийнятно з прийнятою політикою. У мене також немає голосу / повноважень, щоб зробити цю зміну (швидко?). Тож у моєму випадку при дослідженні доріг найменшого опору це здається обіцяним.
Танго Браво

1
Я вважаю, що у віддаленому вікні не встановлено tmux? Інакше було б набагато краще сшш у віддалений ящик і лише після цього запустити 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

Тож основне використання очікування не надто складне, якщо ви вважаєте це аналогічним приміщенню примітивів одночасності

Це не дуже пов'язано з іншими функціоналами 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'

Отже, під "не підключеним до іншого функціоналу" ви маєте на увазі channelце просто ім'я у власному просторі імен і не пов'язане з попередньо визначеними tmux "подіями"?
ormaaj

Проблема з гонкою все ще може виникнути, якщо wait-for -Sвона не гарантує доставку повідомлень та sync-commandзакінчення раніше wait-for.
ormaaj
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.