什么是`hooker script`实际上在`scripts / init-top / all_generic_ide`中?

时间:2016-03-15 09:49:45

标签: ubuntu initrd

我在Ubuntu的ramdisk中学习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

我完全不知道它的目的是什么。我想我可以意识到它的流动,但却无法弄清楚它会做什么?

1 个答案:

答案 0 :(得分:1)

这个样板代码只是在使用参数PREREQ调用脚本时打印prereqs的值,然后以零退出。

initramfs-tools的手册页在HOOK 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

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