我想在启动时有一个单独的启动菜单条目。唯一的区别是 GRUB_CMDLINE_LINUX_DEFAULT 的值。原始(第一个)引导的 GRUB_CMDLINE_LINUX_DEFAULT 具有空值,第二个条目具有传递给内核的值。
简而言之,我想要两个启动菜单条目,唯一的区别是内核参数。我浏览了 /etc/grub.d 但除了 /etc/grub.d 中的粗暴黑客之外找不到其他方法。
我通过从 /etc/grub.d/40_linux 重新运行 /etc/grub.d/10_linux 并取消菜单项来解决这个问题。
第一部分是 /etc/grub.d/40_linux
#!/bin/sh
. /etc/default/grub
export GRUB_DISABLE_RECOVERY=true
export GRUB_DISABLE_SUBMENU=y
export GRUB_CMDLINE_LINUX_DEFAULT=$GRUB_CMDLINE_LINUX_DEFAULT_ALT
/etc/grub.d/10_linux | python3 /usr/local/bin/extract-menuentry.py
Run Code Online (Sandbox Code Playgroud)
因此,我可以使用备用命令行重新运行 10_linux。
将 GRUB_CMDLINE_LINUX_DEFAULT_ALT 放入 /etc/default/grub.conf 中 (在我的例子中,“aufs=tmpfs”)
并编写了一个 python 脚本来选取菜单项。(在我的例子中,在 /usr/local/bin/extract-menuentry.py 中。)
#!/usr/bin/env python3
import os, sys, re
menuentry_start = "menuentry"
def extract_menuentry(infile):
in_menuentry = False
for line in infile.readlines():
if in_menuentry:
if line.strip() == "}":
in_menuentry = False
print(line.rstrip())
pass
else:
print(line.rstrip())
pass
pass
else:
if line.startswith(menuentry_start):
in_menuentry = True
match = re.search(r"menuentry '[^']+' (.*)", line)
print("menuentry '%s' %s" % (os.environ.get('GRUB_ALT_NAME', 'Ubuntu alt'), match.group(1)))
pass
pass
pass
pass
if __name__ == "__main__":
extract_menuentry(sys.stdin)
pass
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7134 次 |
最近记录: |