【问题标题】:Gnu Screen hardcopy without joining screen没有加入屏幕的 Gnu Screen 硬拷贝
【发布时间】:2016-03-22 02:28:37
【问题描述】:

我编写了一个 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 中看到了输出。

有没有办法在不加入屏幕的情况下将硬拷贝写入文件?

【问题讨论】:

标签: macos bash gnu-screen


【解决方案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.3v4.2.0 及以上相同环境中无法正常工作(生成空白文件)。

广泛调查:

调试显示根本原因在WriteFilefileio.c:472if (!fore) break; 退出函数而没有写入任何内容,因为fore(指向前景窗口的指针)确实是NULL。 我无法确定修复此问题的具体提交,但确实检查了它不是 v4.2.0 中的 NULL。该变量设置在代码库周围的许多地方,并在大致相同数量的地方重置为NULL,通常在赋值之后的代码中。因此,解决方法的机会非常渺茫。

我在此重申screenv4.0.3 中的hardcopy 已损坏,您必须升级(例如,将版本安装到/usr/local,以便它覆盖现有版本)。

【讨论】:

  • 如果我运行前两个命令(但将 -r 更改为 -S),我仍然在 screenOutput.txt 文件中什么也得不到。
  • @user1763510 WFM 与答案中的代码。 screen v4.03.01
  • 奇怪,我在 OSX 10.10.5 上。你在linux上吗?好像不会有什么不同。 Screen version 4.00.03
  • 刚刚用Screen version 4.00.03 (FAU) 23-Oct-06在Linux上试过,还是不行。
猜你喜欢
  • 2011-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
  • 1970-01-01
相关资源
最近更新 更多