GNU 屏幕:将分离的会话打印到标准输出

Pie*_*rre 22 logs gnu-screen stdout

我只想快速浏览一下我分离的 GNUscreen会话。是否可以将当前内容转储到 stdout ?就像是

screen --print SESSION_NAME > file.txt
Run Code Online (Sandbox Code Playgroud)

Sté*_*las 17

您可以使用 转储屏幕会话的一个窗口screen -X hardcopy /some/file,这会将当前窗口的屏幕转储保存在/some/file.

您可以使用以下命令转储特定窗口:

screen -X at 3 hardcopy /some/file
Run Code Online (Sandbox Code Playgroud)

所有这些都在一个文件中:

screen -X eval 'hardcopy_append on' 'at \\# hardcopy /some/file'
Run Code Online (Sandbox Code Playgroud)

您还可以通过指定将它们转储到哪个目录中来为每个窗口转储一个文件(如果您不指定它,那么它们将被转储到screen启动目录中)

screen -X eval 'hardcopydir /some/dir' 'at \\# hardcopy'
Run Code Online (Sandbox Code Playgroud)

(将被转储到名为 的文件中hardcopy.<n>

请参阅包含滚动缓冲区的-h选项hardcopy

像往常一样使用screen's-S选项指定运行命令的会话。 ? ? ? ? ?? ?

  • 除了输出到临时文件,catting它,然后删除临时文件之外,有没有办法硬拷贝到stdout? (4认同)
  • 如果从未附加过屏幕会话,[选择带有`-p`或`at`的窗口是必要的](http://unix.stackexchange.com/questions/13953/sending-text-input-to-a-分离屏幕/13961#13961)。因此,如果“screen -X hardcopy /some/file”不起作用,请尝试“screen -X at 0 hardcopy /some/file”或“screen -p 0 -X hardcopy /some/file”。 (3认同)
  • @克劳迪乌:你的问题已经有 3 年多的历史了,但答案无论如何都是相关的:不;我刚刚使用 `strace` 发现“客户端”屏幕将硬拷贝命令发送到服务器,而服务器负责处理它。(联机帮助页指出硬拷贝文件是写在服务器的 cwd 中,而不是客户端的。)在硬拷贝的情况下,TTY 数据显然没有通过网络。 (2认同)

Geo*_*e M 11

从启用会话日志记录screen-L选项开始。

或者,在启动后screen,您可以screen使用CTRLa-打开和关闭会话中窗口的日志记录H

日志将在您当前的工作目录中创建,名称为screenlog.XX 是唯一编号。

启用日志记录时窗口列表的输出L在 Flags 列中有一个。

Num Name           Flags
  0 fedora         $(L)               
  1 sudo           $                                        
  2 fedora         $(L)                                                
Run Code Online (Sandbox Code Playgroud)


And*_*ndy 5

使用命名管道,您可以输出到标准输出,就像标题(而不是问题)所要求的那样。

function screen_peek()
{
  # Create a random filename
  local pipe="$(mktemp -u)"
  # Crete a named pipe
  mkfifo "${pipe}"
  # Runs hardcopy in background, wrt bash (the client)
  screen -S "${1}" -X hardcopy "${pipe}"
  # Redirect pipe to stdout and remove trailing and leading blank lines
  cat "${pipe}" | sed -e '/./,$!d' -e :a -e '/^\n*$/{$d;N;};/\n$/ba'
  # Cleanup
  rm -f "${pipe}"
}
Run Code Online (Sandbox Code Playgroud)

当屏幕硬拷贝转储完成时,bash 中的匿名管道(和 coproc)不会导致cat结束(EOF),因为它使管道保持打开状态。匿名管道对应该在其他语言中分离,例如 python 中的低级调用。