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

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

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

那么有没有很好的理由避免使用bash ,当目标仅限于debian 6+Ubuntu 12.04

更新:

我通常将下面的shebang添加到脚本中: #!/usr/bin/env bash

如果你专门针对总是带有bash (主要是典型的Linux发行版(?)),那么如果允许使用更多的可维护脚本或者其他一些显着的优点,那么使用它就没有什么坏处(当然提供了shebang正确地反映了bash依赖)。

dash的目标是成为一个精简的POSIX兼容的shell。 Debian和Ubuntu转而使用它作为在大部分启动脚本中获得更轻的shell的手段(导致更快的启动时间等),并确保所有声称使用/bin/sh运行的脚本都不是实际的充满偶然的双重冲突。

另一方面,如果可移植性很重要,我认为你的默认/bin/shdash )看起来好像是一个更好的起点,因为只使用POSIX shell特性的脚本可能在大多数系统上运行,而不仅仅是那些使用bash当下。 但是,在处理可移植性时,除了shell之外,当然还有许多其他因素可以考虑。

没有理由避免在启动脚本中使用bash。 如果你对bash感到满意,并且你喜欢它,因为它提供的function你不会进入另一个shell,通过一切手段来使用它。 首先,确保你的/ bin / sh实际上不是连接到/ bin / bash或/ bin / bash本身的拷贝 – 在某些系统上是这样的。

Bash可能不会被安装。

与其他发行版不同的是,Debian和Ubuntu使用破折号Bourne shell作为默认的/ bin / sh shell。