Skip to content

使用其他shell

什么是dash shell

它是ash shell的直系后代,而ash shell则是Unix系统上原来的Bourne shell的简化版本

ash shell最早的版本体积极小、速度奇快,但缺乏许多高级功能,比如命令行编辑或命令使用记录功能,这使它很难用作交互式shell

Debian Linux发行版创建了它自己的ash shell版本(称作Debian ash,或dash)以供自用。dash复制了ash shell的NetBSD版本的大多数功能,提供了一些高级命令行编辑能力\

Ubuntu Linux发行版将bash shell用作默认的交互shell,但将dash shell用作默认的/bin/sh shell。这个“特性”着实让shell脚本程序员一头雾水

在Unix世界中,默认shell一直是/bin/sh。在大多数Linux发行版上,/bin/sh文件是链接到shell程序/bin/bash的一个符号链接

Ubuntu Linux发行版将/bin/sh文件链接到了shell程序/bin/dash。由于dash shell只含有原来Bourne shell中的一部分命令,这可能会(而且经常会)让有些shell脚本无法正确工作

dash shell的特性

dash shell使用命令行参数来控制其行为。表23-1列出了命令行参数,并介绍了每个参数的用途

参数描述
-a导出分配给shell的所有变量
-c从特定命令字符串中读取命令
-e如果是非交互式shell的话,在有未经测试的命令失败时立即退出
-f显示路径名通配符
-n如果是非交互式shell的话,读取命令但不执行它们
-u在尝试展开一个未设置的变量时,将错误消息写出到STDERR
-v在读取输入时将输入写出到STDERR
-x在执行命令时将每个命令写出到STDERR
-I(大写i)在交互式模式下,忽略输入中的EOF字符
-i强制shell运行在交互式模式下
-m启用作业控制(在交互式模式下默认开启)
-s从STDIN读取命令(在没有指定文件参数时的默认行为)
-E启用emacs命令行编辑器
-v启用vi命令行编辑器