Unix 指南/解釋/Shell 選擇
Unix 提供了各種各樣的 Shell,包括 Bourne 相容 Shell (sh, bash, ksh, pdksh, ash, dash 等)、C Shell (csh, tcsh)、Z Shell (zsh) 和 Friendly Interactive Shell (fish)。
許多 Linux 發行版的預設互動式 Shell 是 Bourne-Again Shell (bash)。某些 Linux 發行版的預設指令碼執行 Shell 是 Debian Almquist Shell (dash)。macOS 中的預設 Shell 過去也是 Bash,但現在是 Z Shell (zsh)。
所有 Unix Shell 都是相似的,但它們具有不同的功能。如果您是初學者,並且不知道 Shell 之間的區別,那麼您可能想從 Bourne 相容的 POSIX (Portable Operating System Interface) 相容 Shell 開始,例如 bash 或 ksh。
Bourne 相容 Shell
- sh 是最初的 Bourne Shell。在許多非 Linux 系統上,這是一個沒有 POSIX 功能的舊 Shell。因此,bash 和 ksh(甚至 csh 和 tcsh)比 sh 更好的選擇。不過,在某些系統上,sh 實際上與 bash 或 ksh 相同。
- bash 是 GNU Bourne-again Shell。它主要相容 Bourne,主要相容 POSIX,並具有其他有用的擴充套件。它是大多數 Linux 系統上的預設 Shell。如果它不是預設的,它可能已安裝在 Linux 上,也可以安裝在非 Linux 系統上。
- ksh 是三個中的一個
- 公有領域 ksh (pdksh) 相容 Bourne [1] 並且主要相容 POSIX。
- AT&T ksh 是一個商業 Shell。它具有 pdksh 的所有功能,加上 ksh93 版本具有幾個有趣的擴充套件,不同於 bash。它自 2005 年以來一直在開源許可下授權;Mac OS X 10.4 包含它。
- mksh 是 MirBSD 增強版的公有領域 Korn Shell (pdksh)
- ash,即 Almquist Shell,是一個 POSIX 相容 Shell,比 bash 小很多。它是多個 BSD 變體的預設 Shell。它的變體 Debian Almquist Shell (dash) 是 Debian 和 Ubuntu Linux 發行版中用於執行 Shell 指令碼的預設 Shell,而不是互動式使用。
連結
- Bourne Shell, wikipedia.org
- Bash (Unix Shell), wikipedia.org
- KornShell, wikipedia.org
- Almquist Shell, wikipedia.org
BSD 引入了 C Shell,它有時有點像 C 程式語言。這個 Shell 是 csh。Shell tcsh 是具有更多功能的 csh。這些 Shell 不是 Bourne 相容的。許多功能後來被新增到 Bourne 相容 Shell 中(除了舊版本的 sh)。當這些功能在 C Shell 和 Bourne 相容 Shell 中以不同的方式工作時,本指南將描述 Bourne 相容 Shell。
如果 csh 或 tcsh 是您的預設 Shell,那麼使用 bash 或 ksh 來獲得 Bourne 相容性和 POSIX 功能可能會使您受益。一些使用者仍然喜歡 C Shell。
連結
有一些替代 Shell,例如 zsh,即 Z Shell。Z Shell 擁有額外的和不尋常的功能,使其成為許多人最喜歡的 Shell(例如,它有一個內建的 ftp 客戶端)。雖然 Z Shell 幾乎與 Bourne 相容,但它在足夠多的方面有所不同,以至於它的預設行為與 Bourne 不相容,儘管 zsh 能夠在收到指示時偽裝成 Bourne Shell。它也可以模擬 ksh。
連結
- Z Shell, wikipedia.org
如果您不喜歡正在使用的 Shell,您可能想使用其他 Shell,例如 ksh 或 bash。Shell 是普通的程式,可以輕鬆執行。SHELL 環境變數仍然包含預設 Shell。exit 命令將帶您返回第一個 Shell。
tcsh> echo $SHELL /bin/tcsh tcsh> bash bash$ echo $SHELL /bin/tcsh bash$ exit exit tcsh>
透過檢視以下內容找到 Shell 列表:/etc/shells(可以透過執行 more /etc/shells 來完成)。命令passwd -e,在某些系統上chsh,將提示輸入新的 Shell。要從bash更改為tcsh,只需執行chsh它將詢問使用者輸入新 Shell 的絕對路徑
$ chsh
Password:
Changing the login shell for baldur
Enter the new value, or press ENTER for the default
Login Shell [/bin/bash]: /bin/tcsh
或者使用者可以指定 Shell
$ chsh -s /bin/tcsh Password:
必須使用 Shell 的絕對路徑來指定 Shell,這可以使用以下方法找到:which tcsh.
連結
- Passwd (命令), wikipedia.org
- Chsh, wikipedia.org
- ↑ pdksh 版本 5.2.9 http://www.cs.mun.ca/~michael/pdksh/NEWS "可以再次編譯為 sh ( --enable-shell=sh) "。
- Linux 的五大開源命令列 Shell, opensource.com
- Unix Shell:Bash、Fish、Ksh、Tcsh、Zsh, hyperpolyglot.org
- Linux Shell 的演變, ibm.com
- 為什麼 Bash 無處不在(在大多數如果不是全部 Linux 發行版中)?, superuser.com
- 1.8 存在許多 Shell 在 Peek、O'Reilly 和 Loukides 的 Unix Power Tools 中,docstore.mik.ua
- 2. Shell 命令語言 在開放組基本規範第 7 版中,opengroup.org
- Unix Shell, wikipedia.org
- 命令列 Shell 的比較, wikipedia.org