Có tmux đợi cho đến khi tôi SSH, để hoàn thành phần còn lại của tập lệnh Tmuxinator


13

Sau khi phát hiện ra tmux và Tmuxinator gần đây, tôi đã cố gắng thiết lập một môi trường phát triển để sử dụng.

Trên mỗi giao thức, chúng tôi không được phép lưu trữ mật khẩu / cụm mật khẩu trong tập lệnh. Vì vậy, điều tôi đang tìm kiếm là chờ tmux đợi đường hầm SSH được thiết lập (mật khẩu được cung cấp, nhập nhấn và đăng nhập).

Tôi biết rằng có một lệnh "chờ" trong tmux 1.8+. Tôi đang chạy 1.9a qua Cygwin. Nhưng mặc dù tôi đã đọc qua tài liệu, tôi chỉ gặp khó khăn để hiểu nó.

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

Vì vậy, đây là một phiên bản rất đơn giản của những gì tôi có.

Suy nghĩ? Tôi biết tôi có thể đồng bộ hóa các phiên, tôi vẫn đang xử lý các nút thắt trong việc này.

Chỉnh sửa : Xem xét các lệnh và kéo các biến từ khung vào lệnh từ các bảng được đồng bộ hóa. Đây có thể là một cách "tốt hơn" để tiếp tục, cho đến khi tôi có thể tìm ra cách lấy TMUX để nhắc tôi nhập dữ liệu người dùng.

Có thể đưa ra một yêu cầu tính năng.


2
Tại sao bạn không kết nối mà không có mật khẩu và sử dụng khóa chung / riêng?
YoMismo

Tôi đã nói rằng tôi không thể kết nối theo cách đó. Mặc dù về mặt kỹ thuật tôi có thể , nó không được chấp nhận với các chính sách đã được đưa ra. Tôi cũng không có tiếng nói / thẩm quyền để thực hiện thay đổi đó (một cách nhanh chóng?). Vì vậy, trong trường hợp của tôi, trong việc kiểm tra những con đường ít kháng cự nhất, điều này dường như có hứa hẹn.
Tango Bravo

1
Tôi cho rằng hộp từ xa không cài đặt tmux? Nếu không, sẽ tốt hơn nhiều nếu ssh vào hộp điều khiển từ xa và chỉ sau đó khởi chạy tmux. // Ngoài ra, tôi đề nghị bạn nên tận dụng của bạn ~/.ssh/configtập tin: đặt Host foo, User userHostname example.comtrên ba dòng liên tiếp trong file config. Sau đó ssh footrở nên tương đương với ssh user@example.com. // Có lẽ một cái gì đó như thế này cũng giúp:command-prompt -p 'log in as:' -I 'user@example.com' 'split-window -v -d %1; split-window -v -d %1'
damien

Câu trả lời:


3

Một số lưu ý của wait-for

Vì vậy, việc sử dụng cơ bản của chờ đợi không quá phức tạp nếu bạn nghĩ rằng nó tương tự như các nguyên hàm đồng thời xâu chuỗi

Nó không thực sự được kết nối với chức năng tmux khác, chỉ là một triển khai IPC thuận tiện.

wait-for event_namegiống như chờ đợi một sự kiện wait-for -S event_name là một phương tiện báo hiệu một sự kiện

Các tùy chọn -U-Llà loại trực giao và hoạt động như semaphores

Giải quyết câu hỏi của bạn trực tiếp

Bạn có thể giải quyết các loại điều kiện cuộc đua với wait-fornhưng chỉ khi các lệnh được đồng bộ.

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

Vấn đề mà bạn gặp ở đây là lệnh ssh không đồng bộ: bạn không thể biết khi nào nó kết thúc.

Nhìn qua hướng dẫn, chúng ta có thể tìm thấy lệnh LocalCommanddường như làm những gì chúng ta muốn: chạy một lệnh cục bộ sau khi kết nối kết thúc để chúng ta có thể gọi

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

Vì vậy, bởi "không được kết nối với chức năng khác", ý bạn channellà tên chỉ trong không gian tên của chính nó và không liên quan đến "sự kiện" được xác định trước của tmux?
ormaaj

Vẫn có thể có vấn đề về chủng tộc nếu wait-for -Skhông đảm bảo gửi tin nhắn và sync-commandkết thúc trước đó wait-for.
ormaaj
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.