tmux:运行 窗格中的命令和捕获结果,在 bash 脚本中

tmux: run command in pane and capture result, in bash script

使用 tmux,我想 运行 一个窗格中的命令针对另一个窗格,并捕获命令的输出。

例如,假设在窗格 7 中我有一个 SSH 会话 运行ning,我想在窗格 2 中 运行 一个 bash 脚本来捕获主机名来自窗格 7.

这可能吗?

我知道我可以像这样发送密钥

$ tmux send-keys -t 7 "hostname" Enter

但我不确定如何将窗格 7 的输出捕获到 bash 变量中。

我也不介意它是否显示在屏幕上(不必在后台发生)。

编辑:请注意,主机名只是一个示例 - 我还想 运行 针对每个窗格的其他脚本

虽然不完全是我要找的东西,但 tmux capture-pane 命令似乎捕获了窗格的显示输出,我当然可以 运行 在 运行 之后命令。

example.sh

#/bin/bash

# run the command in another pane
tmux send-keys -t 7 "hostname" Enter

# capture it's output
IT=$(tmux capture-pane -p -t 7)
echo "$IT"

作为 capture-pane 的替代方法,您可以类似地使用 pipe-pane。它通常用于日志记录。您给它一个命令将所有输出通过管道传输到其中,或者根本没有命令来停止管道传输。所以你最终会得到类似

的东西
tmux pipe-pane -t 7 'cat >/tmp/capture'
tmux send-keys -t 7 'hostname' Enter
sleep 1
tmux pipe-pane -t 7    # stops piping 
IT=$(</tmp/capture)

注意,此捕获包含回车符-return。您将需要删除捕获的第一行和最后一行以获得所需的输出。例如:

IT=$(sed '1d;$d;s/\r//' </tmp/capture)