Linux

讓 tmux 等到我 SSH 進入,以完成其餘的 Tmuxinator 腳本

  • June 20, 2017

最近發現了 tmux 和 Tmuxinator 之後,一直在嘗試搭建一個開發環境來使用。

根據協議,我們不允許在腳本中儲存密碼/密碼片語。所以我正在尋找的是等待 tmux 等待 SSH 隧道建立(提供密碼,按下輸入,然後登錄)。

我知道 tmux 1.8+ 中有一個“等待”命令。我正在通過 Cygwin 執行 1.9a。但即使我已經閱讀了文件,我也很難理解它。

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 提示我進行使用者輸入之前,這可能是一種“更好”的方式。

可能會發出功能請求。

的一些筆記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'

引用自:https://unix.stackexchange.com/questions/144663