我可以在服务/守护进程脚本中使用 Bash 解释器吗?

我可以在服务/守护进程脚本中使用 Bash 解释器吗?

我正在编写一个应该在运行级别 2-5 启动的 Debian/Ubuntu 服务。

我遇到的大多数现有服务都是使用/bin/sh(Shell)解释器编写的,而/bin/bash(Bash)提供了许多改进和简化。

那么有什么好的避免使用 bash 的原因,当目标仅限于 Debian 6+Ubuntu 12.04

更新:

我通常会在我的脚本中添加以下内容:#!/usr/bin/env bash

答案1

如果您专门针对始终附带的系统(主要是典型的 Linux 发行版(?)),如果它可以提供更多可维护的脚本或为您带来其他显着优势(当然,前提是 shebang 正确地反映了依赖关系),bash我认为使用它没有什么坏处。bash

dash目标是成为精益的 POSIX 兼容 shell。Debian 和 Ubuntu 已转向它作为在其大部分启动脚本中获得更轻量级 shell 的一种手段(从而缩短启动时间等),并确保所有声称可以运行的脚本/bin/sh实际上不会充斥着意外的攻击。

另一方面,如果可移植性很重要,我认为您的默认/bin/sh( dash) 似乎是更好的起点,因为仅使用 POSIX shell 功能的脚本可能在大多数系统上运行,而不仅仅是那些具有bash现有功能的系统。但是,在处理可移植性时,除了 shell 之外,当然还有很多其他因素需要考虑。

答案2

没有理由避免在启动脚本中使用 bash。如果您熟悉 bash,并且喜欢它,因为它提供了其他 shell 所没有的功能,那么一定要使用它。首先,确保您的 /bin/sh 实际上不是 /bin/bash 的链接或 /bin/bash 本身的副本 - 在某些系统上是这种情况。

答案3

Bash 可能未安装。

与其他发行版不同,Debian 和 Ubuntu 使用 dash(精简版的 Bourne shell)作为默认的 /bin/sh shell。

相关内容