Linux:什么是Dash(/bin/dash)Shell?

时间:2020-01-09 10:38:00  来源:igfitidea点击:

什么是/bin/dash?
我注意到默认的系统shell程序/bin/sh已更改为/bin/dash。
为什么要进行此更改?

Dash是Debian Almquist shell(Dash)的首字母缩写。
它是一个Unix和Linuxshell,比bash小得多,但仍以POSIX兼容为目标。
dash是/bin/sh的POSIX兼容实现,目的是尽可能地小。

dash是ash的NetBSD版本ash(Almquist SHell)的直接后代,该版本于1997年初移植到Linux。
它在2002年重命名为dash。

dash是Linux系统的标准命令解释器。
当前的dash正在更改过程中,以符合POSIX 1003.2和1003.2ashell规范。
该版本具有许多功能,在某些方面使其看起来与Korn Shell相似,但它不是Korn Shell克隆。
此shell程序仅包含POSIX指定的功能以及一些Berkeley扩展。

从DebianSqueeze和Ubuntu 6.10开始,默认shell为Dash。
由于以下技术原因,默认系统shell程序/bin/sh已更改为/bin/dash:

  • 为了加快系统启动时间。原因是Dash的启动速度比bash的启动速度快,并且在启动过程中启动了很多次shell。测量表明它们运行速度相当快,因此启动时间的缩短必须归因于Dash在初始化过程中减少了工作量。
  • 它需要较少的磁盘空间,但功能也较少。
  • 这取决于更少的库
  • 在升级问题或磁盘故障的情况下,它被认为"更可靠"。

关于Bash特定脚本的说明

建议为避免自己的特定于Bash的脚本出错,可以使用shebang行,如下所示:

#!/usr/bin/env bash.

或者

#!/path/to/real/bash.binary

或者

#!/usr/local/bin/bash

Ubuntu 建议:

Shell脚本的开发人员遵守POSIX标准,省略了标记为XSI扩展的项目。
这样做将改善对各种Unix系统的可移植性,并确保您遇到的问题将被视为错误而不是未记录的功能。

测试所有脚本,并使用虚拟化或测试计算机查看一旦/bin/sh默认为/bin/dash,它们是否会中断。