什么是“钩子脚本”,实际上是在“scripts/init-top/all_generic_ide”中



我正在研究Ubuntu的虚拟硬盘中的init。在scripts/init-bottom/udev,我看到了以下代码片段:

PREREQ=""
prereqs()
{
    echo "$PREREQ"
}
case $1 in
# get pre-requisites
prereqs)
    prereqs
    exit 0
    ;;
esac

它几乎出现在scripts/**脚本中的每个脚本(如scripts/init-top/all_generic_ide,scripts/local-bottom/ntfs_3g,scripts/local-premount/fixrtc等)。虽然它们可能有一些细微的区别,但它们中的大多数只是在正文代码的顶部有相同的片段。

我从 Ubuntu 阅读了 wiki:initramfs-tools

我完全不知道它的目的是什么。我想我可以实现它的流程,但就是不知道它会做什么?

当使用参数 prereqs 调用脚本时,此样板代码仅打印 PREREQ 的值,然后以零退出。

initramfs-tools 的手册页在 HOOK SCRIPTS -> Boot scripts 中说:

除非在脚本

中设置了前提条件,否则不保证不同脚本的执行顺序。

因此,scripts/init-bottom 中的脚本将在启动时以任意顺序执行(如果它们未指定 prereqs)。如果这些脚本相互依赖,则脚本必须定义先决条件以确保正确的执行顺序。

例如,一个脚本可能挂载/home(称为 mount_home),另一个脚本创建新的用户帐户(称为 create_users )。然后第二个脚本需要使用更改样板代码来声明对第一个脚本的依赖(调用create_user prereqs应返回 mount_home):

PREREQ="mount_home"
prereqs()
{
    echo "$PREREQ"
}
case $1 in
# get pre-requisites
prereqs)
    prereqs
    exit 0
    ;;
esac

如果您的脚本不依赖于同一目录中的其他脚本,则只需复制样板代码即可。

最新更新