其余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的体积,
在须要更快执行速度时增长可用的内建命令数量。
相关文章
相关标签/搜索