其餘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的體積,
在須要更快執行速度時增長可用的內建命令數量。
相關文章
相關標籤/搜索