如何将“ screen”内部的输出输出到脚本?


33

screen正在运行一个实例,并且需要在中执行一些代码screen,并将结果输出到脚本中。

第一部分很简单,我只是screen -S session_name -X eval 'stuff "$cmd"\015'
(我修改了在脚本中找到的一行

第二部分,获取输出,比较棘手。无论大小如何,如何获得整个输出?



谢谢:)第二个链接解释了为什么第一个命令必须是的原因stuff,这是我难以理解的。
2011年

Answers:


29

您可以从screen-L选项开始。这将导致屏幕screenlog.n在当前工作目录中创建文件(n部分为数字,从零开始)。

您的情况如下所示: screen -S session_name -L -X eval 'stuff "$cmd"\015'

只要您记得之后进行清理,这应该与您要执行的操作相符。

对于日志的最后一行,可以使用轻松获取tail -1 screenlog.0,也可以根据需要解析整个日志。


不过,有一件事:screen我发出的命令只是发送命令。要启动screen,我使用了screen -dmS name program;-)
1ace 2011年

22

还有一点细微差别可能会对将来有所帮助:如果您正在进行屏幕会话,则可以交互方式请求创建日志文件。按ctrl- a H(Ctrl + A,然后大写H),要求屏幕开始将您正在进入的任何窗口转储到日志文件中。


5
不知道是否是由于更新的版本引起的,但是我man screen说,我必须键入CA H,而不必为H输入Control。仅可悲的是,这不会捕获先前的日志。
马特尔邦(Matmarbon)

2
你是对的!生成日志文件是CAH。请注意,它的大写字母H(小写的h只是当前屏幕的纸质副本)。
rickumali 2012年

3
请更新CA H的答案。将来的搜索者可能会误导并错过正确的答案。
gc5 2014年

有谁知道通过脚本发送命令的方法吗?如发送控制+ a,然后是一秒钟之后的H。
Zach W.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.