You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用screen hardcopy -h导出含GRUB菜单的日志出现特殊字符问题

问题原因

GRUB菜单包含用于终端格式渲染的ANSI控制字符(比如B对应Ctrl+B,用于文本加粗;L是清屏指令;^P是上翻操作),这些字符是GRUB实现菜单样式的底层指令:

  • 手动复制终端内容时,终端会自动解析这些控制字符,只保留最终显示的可视文本;
  • screen hardcopy -h是直接导出滚动缓冲区里的原始数据,包括终端收到的所有字节(控制字符、NULL值等),所以会出现特殊字符,和手动复制效果不一致。
解决方案

要实现和手动复制完全一致的效果,需要让工具先解析控制字符,再捕获最终的可视输出,以下是两种可行方案:

方案1:使用script命令(推荐)

script命令专门用于记录终端会话的输出,会自动处理控制字符,生成和手动复制一致的内容:

export input_file
export output_file

# 直接捕获输出,会包含script的开头注释行
script -q -c "cat \"$input_file\"" "$output_file"

# 如果需要去掉开头的注释行(比如Script started on...),可以用sed过滤
script -q -c "cat \"$input_file\"" /tmp/screen_temp && sed '1,2d' /tmp/screen_temp > "$output_file" && rm /tmp/screen_temp
  • -q参数:静默模式,不显示script的启动提示;
  • -c参数:指定要执行的命令(这里是cat日志文件);
  • 最后用sed去掉前两行注释,得到纯可视内容。

方案2:改进screen脚本,结合col命令解析控制字符

如果必须使用screen,可以用col命令解析终端控制序列,模拟终端渲染后的效果:

export input_file
export output_file
export scrollback_size

screen -Dmc /dev/null sh -c '
  screen -X scrollback "$scrollback_size"
  cat < "$input_file" | col -b > "$output_file"
'
  • col -b:过滤掉所有控制字符,只保留可视文本,和终端解析后的输出一致;
  • 这种方式不需要依赖screen的hardcopy,直接通过管道处理后写入输出文件。

内容的提问来源于stack exchange,提问作者Abhi Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 15:19:32