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

时间:2019-11-19 14:25:53

标签: bash tmux

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

例如,在第7窗格中说我正在运行SSH会话,并且我想在第2窗格中运行bash脚本以捕获第7窗格中的主机名。

这可能吗?

我知道我可以这样做发送键

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

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

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

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

2 个答案:

答案 0 :(得分:1)

作为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)

当心,此捕获包含回车符。您将需要删除捕获的第一行和最后一行,以仅获取所需的输出。例如:

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

答案 1 :(得分:0)

虽然不是我要找的东西,但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"