为什么启动脚本中使用 bash?

为什么启动脚本中使用 bash?

为什么开机/关机时运行的程序要用脚本编写bash

如果使用编译语言(或者更快的解释语言,如Python),那么它的运行时间会更短。

答案1

这在很大程度上是历史性的,部分是系统管理方面的控制问题,部分是可移植性问题,部分是调试问题。

“回到过去”,没有 autoconf、dpkg、rpm。您下载了软件(有时是从 UUCP),编译了产品并根据您自己的约定确定了产品的安装位置。将产品连接到启动/关闭系统被认为是系统管理员的职责。系统管理员将编写rc脚本并将其放置在该系统的适当位置(/etc/inittab/etc/rcN.d//etc/rc.local/etc/inetd.conf)。随着最前沿的非 Linux 系统越来越少,rpm和的出现dpkg使得其中一些本地选择不再那么重要。

系统管理员也喜欢对其系统进行某种程度的控制,而最容易编写、调试和稍后修改的是 shell 脚本,而不是 C 程序。

正如我之前提到的,不同的 UNIX 操作系统有不同的引导方式。为自己的系统编写一个简短的 shell 脚本比开发人员为即将出现的每种可能的 UNIX 风格编写脚本要容易得多(这还是在 autoconf 之前):SysV、Ultrix、Irix、HP-UX、SunOS、Solaris、 NextStep、NonStop 等。在大多数情况下,它们分为两到三种机制,但每种机制都有自己的特点。

引导系统很容易变得复杂。最好有一个 shell 脚本,您可以在其中打印调试信息、更改流程、处理程序作者未预料到的交互。如果这是一个已编译的程序,那么查找此类错误就会变得更加困难。

现代系统有更新的机制,但大多数系统仍然会调用 shell 脚本,主要是由于上述原因。

答案2

大多数启动过程都是 IO 密集型的:等待从磁盘加载文件,或者等待设备初始化。使用编译语言不会有太多好处。

使用代替 bash 确实会在一定程度上加快启动过程。 Ash 被设计为比 bash 更快、更小,这是通过更少的功能(POSIX 以及仅此而已)来实现的。至关重要的是,ash 启动速度更快,这提供了可衡量的优势,因为启动过程分为多个脚本。使用更多的 Python 可能会使启动过程变慢,因为 Python 解释器更大并且每个进程启动需要更多的时间。

Unix 系统通常每个子系统或守护进程都有一个或多个需要初始化的脚本。这些脚本经常由系统管理员调整。这项工作被分成许多来自不同来源的小程序(每个子系统一个)。对于许多小型、简单的程序来说,shell 的速度相当快。使用编译语言不会获得太多好处,但会在灵活性方面付出巨大代价。

答案3

修改 bash 脚本比查找可执行文件的源更容易。

启动脚本通常是特定于发行版的,因此易于修改非常重要。

如果您认为 bash 脚本很慢,您可能需要查看 dash 并编写在 dash 上运行的 POSIX 兼容 sh 脚本。

相关内容