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

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

我只是想快速概述一下我的独立 GNUscreen会话。是否可以将当前内容转储到 stdout ?就像是

screen --print SESSION_NAME > file.txt

答案1

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

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

screen -X at 3 hardcopy /some/file

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

screen -X eval 'hardcopy_append on' 'at \\# hardcopy /some/file'

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

screen -X eval 'hardcopydir /some/dir' 'at \\# hardcopy'

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

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

像往常一样使用screen-S选项来指定要在其中运行命令的会话。 ⁣ ⁣ ⁣ ⁣

答案2

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

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

日志将在您当前的工作目录中创建,并使用名称,screenlog.X其中 X 是唯一的数字。

启用日志记录时窗口列表的输出L在“标志”列中具有 。

Num Name           Flags
  0 fedora         $(L)               
  1 sudo           $                                        
  2 fedora         $(L)                                                

答案3

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

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}"
}

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

相关内容