这个问题也是属于延宕了许久,实在烦不胜烦了,才决定要一劳永逸解决的,之前一直是手动修改 /boot/grub/grub.cfg
,但比较烦人的地方在于,不管是 Grub 自己升级,还是有涉及到内核的其它升级,都会在完成后自动执行 update-grub
从而使得手动修改的部分被清空。而如果放任不改的话,Windows 又跳出来作乱,自动更新后重启系统,就会直接从 Grub 进入到 Ubuntu。
问了问 DeepSeek,给出的例子老是出问题,三五个回合以后,它又回到起初的回答上了。最后还是自己修修改改搞定了。
到 /etc/grub.d/
目录下,创建一个新的 Grub 钩子脚本,三太爷的命名为 31_set_default_os
,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
#!/bin/sh set_windows_as_default() { local windows_entry windows_entry=$(grep -i 'windows' /boot/grub/grub.cfg | grep -oP 'menuentry \K[\x27\x32].*?[\x27\x32]' | tr -d "'\"") if [ -n "$windows_entry" ]; then cat << EOF set default="$windows_entry" EOF echo "Windows is set as default OS." >&2 # echo "Windows found." >&2 else echo "Windows not found." >&2 fi } set_windows_as_default |
\x27
和 \x32
分别是单双引号字符,写成转义的形式是为了不影响命令行的识别和传递。