我问,因为文件 /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 中使用。