最近发现 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 [email protected]' C-m
所以,这是我所拥有的一个非常简单的版本。
想法?我知道我可以同步会话,但我仍在解决其中的问题。
编辑:研究命令,并将变量从窗格拉到同步窗格中的命令。在我弄清楚如何让 TMUX 提示我进行用户输入之前,这可能是一种“更好”的方法。
可能会发出功能请求。
答案1
的一些注释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 [email protected] -o 'PermitLocalCommand yes' -o 'LocalCommand tmux wait-for -S done'