/etc/grub.d/41_custom 应该如何工作?

/etc/grub.d/41_custom 应该如何工作?

我问,因为文件 /boot/grub/grub.cfg 的片段看起来像

### BEGIN /etc/grub.d/41_custom ###
if [ -f  ${config_directory}/custom.cfg ]; then
    source ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f  $prefix/custom.cfg ]; then
    source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###

我不明白,这应该如何工作,因为 grub2 中没有“source”命令 - 请参阅
http://www.gnu.org/software/grub/manual/grub.html

source 如果是 /bin/sh shell 命令。
我认为,这个片段应该
在构建 /boot/grub/grub.cfg 期间包含 ${config_directory}/custom.cfg (使用 grub-mkconfig):

[user@localhost ~]$ cat /etc/grub.d/41_custom 
#!/bin/sh
cat <<EOF
if [ -f  \${config_directory}/custom.cfg ]; then
    source \${config_directory}/custom.cfg
elif [ -z "\${config_directory}" -a -f  \$prefix/custom.cfg ]; then
    source \$prefix/custom.cfg;
fi
EOF

但事实并非如此!
它只是使用“source”命令插入文本......

答案1

这是映射的描述命令到模块名.mod
http://blog.fpmurphy.com/2010/06/grub2-modules.html?output=pdf

grep -E "^source" /boot/grub/i386-pc/command.lst
source: configfile

grep -E "^\.:" /boot/grub/i386-pc/command.lst
.: configfile

这是函数代码:
http://git.savannah.gnu.org/cgit/grub.git/tree/grub-core/commands/configfile.c#n61

所以,“source”只是 grub2 的一个未记录的命令

答案2

gnu.org 网站上的 Grub 2.02 手册在 16.3.71 的“命令行和菜单输入命令”部分提供了“source”命令的文档。因此,到 2017 年 4 月 25 日(当前版本的 Grub 手册的日期)为止,源命令已被记录下来,我现在发现它在当前 Linux MINT 19 发行版的文件 /etc/grub.d/41_custom 中使用。

相关内容