Grub2

/etc/grub.d/41_custom 應該如何工作?

  • April 6, 2019

我在問,因為文件 /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 中沒有“源”命令 - 請參閱

http://www.gnu.org/software/grub/manual/grub.html

source 如果是 /bin/sh shell 的命令。

我認為,這個片段應該包括 ${config_directory}/custom.cfg

在建構 /boot/grub/grub.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

但事實並非如此!

它只是使用“源”命令插入文本…

這是從命令映射到 modulename.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 的一個無證命令

gnu.org 網站上的 Grub 2.02 手冊在 16.3.71 的“命令行和菜單條目命令”部分提供了“源”命令的文件。因此,到 2017 年 4 月 25 日——目前版本的 Grub 手冊的日期——源命令已記錄在案,我現在發現它在目前 Linux MINT 19 發行版的 /etc/grub.d/41_custom 文件中使用。

引用自:https://unix.stackexchange.com/questions/180470