我正在为一个可以在不同计算机上使用的驱动器编写自定义 grub.cfg。根据我在哪台计算机上使用它,设备标识符可能会有所不同(从 hd0 到 hd1 或 hd2,具体取决于存在的其他驱动器)。
给${cmdpath}
了我正确的 grub.cfg 位置,所以我基本上是在尝试做set root=${cmdpath}/../../
。但是,然后ls /
返回错误消息error: disk '(hd1,gpt1)/EFI/BOOT/../../' not found.
⇒ 有没有办法通过使用 grub.cfg 命令来获取该hd1
部分?${cmdpath}=(hd1,gpt1)/EFI/BOOT
我知道正确的解决问题的方法是使用命令search
。但为了简化部署,我尝试在多个驱动器上使用完全相同的 grub.cfg(因此没有search.fs_uuid
),并且计算机上可以有两个相同驱动器格式的实例(因此我不能依赖search.fs_label
或search.file
)。
答案1
只需注意regexp
命令:
regexp -s 2:drive (.*)(hd[0-9]*)(.*) $cmdpath
甚至这似乎也有效:
regexp -s drive (hd[0-9]*).* $cmdpath
不确定在这种情况下(
incmdpath
是否被忽略/剥离是一个错误,所以第一种方法可能更安全(编辑:除非原始文件root
不在同一个磁盘照这样cmdpath
,您可以改用这种方法root
;当获得其价值()
时显然会被剥离)root
顺便说一句,虽然我还没有检查过,但我认为当 grub 安装到 MBR 驱动器以用于 BIOS(即,在这种情况下core.img
嵌入到 MBR 后间隙中)时,cmdpath
可能是一个hdX
。对我来说,不幸的是,在 GPT(EFI 或非 EFI)的情况下,变量没有(重新)定义为磁盘已core.img
开启,并且也没有为此引入任何新变量。