我只是想快速概述一下我的独立 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
中窗口的日志记录。screen
CTRLaH
日志将在您当前的工作目录中创建,并使用名称,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 中的低级调用。