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