跳轉到內容

Unix 指南/解釋/Shell 選擇

來自 Wikibooks,開放書籍,開放世界

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)。

Bourne 相容 Shell

[編輯 | 編輯原始碼]

所有 Unix Shell 都是相似的,但它們具有不同的功能。如果您是初學者,並且不知道 Shell 之間的區別,那麼您可能想從 Bourne 相容的 POSIX (Portable Operating System Interface) 相容 Shell 開始,例如 bashksh

Bourne 相容 Shell

  • sh 是最初的 Bourne Shell。在許多非 Linux 系統上,這是一個沒有 POSIX 功能的舊 Shell。因此,bash 和 ksh(甚至 csh 和 tcsh)比 sh 更好的選擇。不過,在某些系統上,sh 實際上與 bash 或 ksh 相同。
  • bashGNU 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,而不是互動式使用。

連結

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。

連結

臨時使用不同的 Shell

[編輯 | 編輯原始碼]

如果您不喜歡正在使用的 Shell,您可能想使用其他 Shell,例如 kshbash。Shell 是普通的程式,可以輕鬆執行。SHELL 環境變數仍然包含預設 Shell。exit 命令將帶您返回第一個 Shell。

tcsh> echo $SHELL
/bin/tcsh
tcsh> bash
bash$ echo $SHELL
/bin/tcsh
bash$ exit
exit
tcsh>

永久更改預設 Shell

[編輯 | 編輯原始碼]

透過檢視以下內容找到 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.

連結

[編輯 | 編輯原始碼]

參考文獻

[編輯 | 編輯原始碼]
  1. pdksh 版本 5.2.9 http://www.cs.mun.ca/~michael/pdksh/NEWS "可以再次編譯為 sh ( --enable-shell=sh) "。
華夏公益教科書