让 tmux 等到我通过 SSH 登录,以完成其余的 Tmuxinator 脚本

Tan*_*avo 13 linux ssh tmux

最近发现了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
Run Code Online (Sandbox Code Playgroud)

所以,这是我所拥有的一个非常简单的版本。

想法?我知道我可以同步会话,我仍在解决这方面的问题。

编辑:查看命令,并将窗格中的变量从同步窗格中提取到命令中。这可能是一种“更好”的方法,直到我能弄清楚如何让 TMUX 提示我进行用户输入。

可能会发出功能请求。

Att*_*igh 5

的一些注释wait-for

因此,如果您将 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
Run Code Online (Sandbox Code Playgroud)

这里的问题是 ssh 命令不同步:您无法知道它何时完成。

翻阅手册,我们可以找到LocalCommand似乎可以实现我们想要的指令:连接完成后在本地运行命令,以便我们可以调用

ssh root@iris.tatw.name -o 'PermitLocalCommand yes' -o 'LocalCommand  tmux wait-for -S done'
Run Code Online (Sandbox Code Playgroud)