跳转到内容

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) "。
华夏公益教科书