其他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的体积,
在需要更快执行速度时增加可用的内建命令数量。
其他shell的更多相关文章
- Shell替换
如果表达式中包含特殊字符,Shell 将会进行替换.例如,在双引号中使用变量就是一种替换,转义字符也是一种替换. #!/bin/bash a= echo -e "Value of a is ...
- Shell特殊变量
$ 表示当前Shell进程的ID,即pid $echo $$ 运行结果 特殊变量列表 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数 ...
- shell变量
定义变量 定义变量时,变量名不加美元符号($),如: variableName="value" 注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样.同时,变量名 ...
- 第一个shell脚本
打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好. #!/bin/bash echo "Hello World !" &quo ...
- shell简介
Shell作为命令语言,它交互式地解释和执行用户输入的命令:作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支. shell使用的熟练程度反映了用户对U ...
- Shell碎碎念
1. 字符串如何大小写转换 str="This is a Bash Shell script." 1> tr方式 newstr=`tr '[A-Z]' '[a-z]' < ...
- MongoDB学习笔记二—Shell操作
数据类型 MongoDB在保留JSON基本键/值对特性的基础上,添加了其他一些数据类型. null null用于表示空值或者不存在的字段:{“x”:null} 布尔型 布尔类型有两个值true和fal ...
- 使用C#给Linux写Shell脚本
在这个逼格决定人格,鄙视链盛行的年头,尤其是咱们IT界,请问您今天鄙视与被鄙视的次数分别是多少?如果手中没有一点压箱的本事,那就只有看的份了.今天我们也要提升下自己的格调,学习些脑洞大开的东西,学完之 ...
- Linux环境下shell和vim中乱码原因及消除办法
shell和vim中乱码原因及消除办法 作者:Jack47 在Linux下开发,经常遇到乱码问题:shell或者vim中显示不了中文,或者能够显示,但不能输入中文.每次都是上网去搜,或者同事告诉我一些 ...
- 【说解】在shell中通过mkfifo创建命名管道来控制多个进程并发执行
背景: 工作中有两个异地机房需要传数据,数据全名很规范,在某个目录下命名为统一的前缀加上编号.如/path/from/file.{1..100}.而机房间的专线对单个scp进程的传输速度是有限制的,比 ...
随机推荐
- CSP201312-4 有趣的数【dp】
问题描述 试题编号: 201312-4 试题名称: 有趣的数 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, ...
- PAT甲级1049 Counting Ones【规律】
题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805430595731456 题意: 给定n,问0~n中,1的总个数 ...
- RxSwift 介绍
RxSwift 介绍 中文文档 https://beeth0ven.github.io/RxSwift-Chinese-Documentation/ https://medium.com/@DianQ ...
- Ansoftmaxwell15.0
电场磁场仿真软件安装出现问题: 基本问题都一样: 解决方式1:安装路径不要有中文的路径. 若安装提示vc++2005x86 安装失败 问题是:没有安装vc++2005 请安装vc++2005 x86 ...
- DCDC参数测量及方法
此文章目的为补充知识,防止遗忘,记录DCDC相关的. 1.拿到一颗DCDC芯片应该测试哪些参数:纹波.电源效率和动态响应. 1)纹波测量方法:示波器偶合方式选择AC:示波器探头的接地也不能用鳄鱼夹,这 ...
- JAVA获取汉字拼音首字母
package com.common.util; import java.io.UnsupportedEncodingException; /** * 取得给定汉字串的首字母串,即声母串 * Titl ...
- LeetCode-7-反转整数-c# 版本
c# 版本 // 给定一个 32 位有符号整数,将整数中的数字进行反转. public class Solution { public int Reverse(int x) { / // 边界判断 / ...
- java的智能提示无法打开
第一步:选中“window”->“preference” 第二步:选中“java”,并展开 第三步:选中“Editor”,并展开 第四步:选中“Content Assist”,在右侧 ...
- linux基本命令之stat
我们在开始接触到linux系统时一般会首先接触ls命令,但是ls命令一来有众多参数,二来所能显示的文件描述也极为有限,仅仅是stat的一部分,那么我们来看下我们的stat命令如图 stat /etc ...
- 003-单例OR工厂模式
单例模式:DbContextFactory.cs using CZBK.ItcastOA.Model; using System; using System.Collections.Generic; ...