屏幕:列出会话中的窗口(非交互式)

屏幕:列出会话中的窗口(非交互式)

有没有办法从非交互式终端列出屏幕会话的窗口?

screen -S 'screen_name' -X windows

根据gnu.org,该命令显示窗口列表使用消息行

对于交互式控制台来说,这很好,但我需要将其打印到标准输出,以便我可以将其读入另一个程序。

有办法做到这一点吗?

解决方案

我发现最好的方法是使用以下命令获取 Windows id 列表:(由 Stephen Harris 发布)

screen -S 'pid.screen_name' -Q windows

尽管这会在打印时截断窗口的名称,但它实际上并不会截断输出的总大小。因此,如果我在一个屏幕会话中有大约 20 个窗口,这就是输出。

> screen -S 'pid.screen_name' -Q windows
0 bash  1 bash  2 bash  3 bash  4 bash  5 bash  6 bash  7 bash  8 bash  9 bash  10 bash  11 bash  12 bash  13 bash  14 bash  15 bash  16 bash  17 bash  18 bash  19 bash  20 bash

我已经尝试过这个方法到了荒谬的窗口数量。

这样,您可以解析屏幕会话中有多少个窗口,然后使用以下命令为每个窗口发出“标题”命令:

screen -S 'pid.screen_name' -p %window_id% -Q title

替换%window_id%为命令中的每个窗口 ID windows

这次窗口标题根本没有被截断。因此全屏名称被输出到标准输出。

答案1

您可以使用该-Q选项

% screen -S 2908.pts-0.mymachine -Q windows
0- spam  1* news  6 ksh

不幸的是,如果终端宽度超过了适合范围,这会被截断(基本上它会导致命令运行并显示在消息行中,但是将其复制到当前的标准输出)。

相关内容