使用tmux,我想从一个窗格对另一个窗格运行命令,并捕获命令的输出。
例如,在第7窗格中说我正在运行SSH会话,并且我想在第2窗格中运行bash脚本以捕获第7窗格中的主机名。
这可能吗?
我知道我可以这样做发送键
$ tmux send-keys -t 7 "hostname" Enter
但是我不确定如何将窗格7的输出捕获到bash变量中。
我也不介意它是否也显示在屏幕上(不必在后台发生)。
编辑:请注意,主机名只是一个示例-我也想针对每个窗格运行其他脚本
答案 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命令似乎捕获了窗格的显示输出,我当然可以在运行命令后运行它。
#/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"