有没有办法从非交互式终端列出屏幕会话的窗口?
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
不幸的是,如果终端宽度超过了适合范围,这会被截断(基本上它会导致命令运行并显示在消息行中,但是还将其复制到当前的标准输出)。