没有加入画面的Gnu Screen硬拷贝

时间:2016-03-22 02:28:37

标签: macos bash gnu-screen

我编写了一个python应用程序,它在gnu屏幕上运行一些命令而不加入屏幕并查看硬拷贝缓冲区。特别是,我正在运行:

screen -dmS test
screen -S test -p 0 -X stuff "ls$(printf \\r)"
screen -S test -X hardcopy screenOutput.txt

当我看到screenOutput.txt时,我什么都没看到。

但是,如果我加入屏幕,然后运行硬拷贝,

screen -dmS test
screen -S test -p 0 -X stuff "ls$(printf \\r)"
screen -r test
(quit the screen with c-A c-D)
screen -S test -X hardcopy screenOutput.txt

然后我在screenOutput.txt中看到输出。

有没有办法让硬拷贝写入文件而不加入屏幕?

1 个答案:

答案 0 :(得分:1)

有关如何向会话发送命令的示例,请参阅linux - Send command to detached screen and get the output - Unix & Linux Stack Exchange。一个正确的调用是:

screen -dmS test
screen -S test -X hardcopy screenOutput.txt

即。 -X应该是第一个命令选项。 -d / -r切换到只搜索附加/分离的会话必须关注它(这方面的文件非常含糊不清);在这种情况下,根本不需要它们。

我在screen v4.0.3中确认此操作不起作用(生成空白文件)并在v4.2.0中工作,并在同一环境中工作。

广泛调查:

调试显示根本原因位于WriteFile fileio.c:472if (!fore) break;,它退出函数而不写任何内容,因为fore(指向前台窗口的指针)是确实是NULL。 我无法确定修复此问题的具体提交,但确实在NULL中检查了它是不是v4.2.0。该变量在代码库周围的许多位置设置,并在大致相同数量的位置重置为NULL,通常在分配后的代码中。因此,工作解决方案的可能性非常小。

我在此重申,在screen v4.0.3中,hardcopy已被破坏,您必须升级(例如,将版本安装到/usr/local,以便它覆盖库存一个)