其他shell

dash shell

Debian的dash shell的历史很有趣。它是ash shell的直系后代,而ash shell则是Unix系统上原来
的Bourne shell的简化版本(参见第1章)。Kenneth Almquist为Unix系统开发了一个Bourne shell简化版本,并将它命名为Almquist shell,缩写为ash。ash shell最早的版本体积极小、速度奇快,
但缺乏许多高级功能,比如命令行编辑或命令使用记录功能,这使它很难用作交互式shell。
NetBSD Unix操作系统移植了ash shell,直到今天依然将它用作默认shell。NetBSD开发人员
对ash shell进行了定制,增加了一些新的功能,使它更接近Bourne shell。新功能包括使用emacs
和vi编辑器命令进行命令行编辑,利用历史命令来查看先前输入的命令。ash shell的这个版本也
被FreeBSD操作系统用作默认登录shellDebian Linux发行版创建了它自己的ash shell版本(称作Debian ash,或dash)以供自用。dash
复制了ash shell的NetBSD版本的大多数功能,提供了一些高级命令行编辑能力。
但令人不解的是,实际上dash shell在许多基于Debian的Linux发行版中并不是默认的shell。由
于bash shell在Linux中的流行,大多数基于Debian的Linux发行版将bash shell用作普通登录shell,
而只将dash shell作为安装脚本的快速启动shell,用于安装发行版文件。
流行的Ubuntu发行版是例外。这经常让shell脚本程序员摸不清头脑,给Linux环境中运行shell
脚本带来了很多问题。Ubuntu Linux发行版将bash shell用作默认的交互shell,但将dash shell用作

默认的/bin/sh shell。这个“特性”着实让shell脚本程序员一头雾水。
如第11章所述,每个shell脚本的起始行都必须声明脚本所用的shell。在bash shell脚本中,我
们一直用下面的行。
#!/bin/bash 
它会告诉shell使用位于/bin/bash的shell程序来执行脚本。在Unix世界中,默认shell一直是
/bin/sh。许多熟悉Unix环境的shell脚本程序员会将这种用法带到他们的Linux shell脚本中。
#!/bin/sh 
在大多数Linux发行版上,/bin/sh文件是链接到shell程序/bin/bash的一个符号链接
。这样你就可以在无需修改的情况下,轻松地将为Unix Bourne shell设计的shell脚本移植到Linux环境中。
很遗憾,Ubuntu Linux发行版将/bin/sh文件链接到了shell程序/bin/dash。由于dash shell只含原来Bourne shell中的一部分命令,这可能会(而且经常会)让有些shell脚本无法正确工作。
下一节将带你逐步了解dash shell的基础知识以及它跟bash shell的区别。如果你编写的bash 
shell脚本可能要在Ubuntu环境中运行,了解这些内容就尤其重要。

dash shell 命令行参数

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

zsh shell

你可能会碰到的另一个流行的shell是Z shell(称作zsh)。zsh shell是由Paul Falstad开发的一个
开源Unix shell。它汲取了所有现有shell的设计理念并增加了许多独到的功能,为程序员创建了一
个无所不能的高级shell。
下面是zsh shell的一些独特的功能:
 改进的shell选项处理
 shell兼容性模式
 可加载模块
在这些功能中,可加载模块是shell设计中最先进的功能。你在bash和dash shell中已经看到过
了,每种shell都包含一组内建命令,这些命令无需借助外部工具程序就可以使用。内建命令的好
处在于执行速度快。shell不必在运行命令前先加载一个工具程序。内建命令已经在内存中了,随
时可用。
zsh shell提供了一组核心内建命令,并提供了添加额外命令模块(command module)的能力。
每个命令模块都为特定场景提供了另外一组内建命令,比如网络支持和高级数学功能。可以只添
加你觉得有用的模块。
这个功能提供了一个极佳的方式:在需要较小shell体积和较少命令时限制zsh shell的体积,
在需要更快执行速度时增加可用的内建命令数量。
原文地址:https://www.cnblogs.com/zy09/p/10751008.html