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选项指定运行命令的会话。 ? ? ? ? ?? ?
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)
使用命名管道,您可以输出到标准输出,就像标题(而不是问题)所要求的那样。
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 中的低级调用。