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)
使用 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)