我对 Unix 完全陌生。目前,我被要求了解KornShell (ksh)和Bash shell。有人可以给我简要介绍一下这两者吗?
术语“外壳”是“终端”的同义词吗?
我知道我可以在网上阅读有关这两者的文件。但我相信一位经验丰富的 Unix 程序员的概述会帮助我更好地理解。
来自 UNIX.COM 的帖子
外壳特点
下表列出了我认为会让您选择一个外壳而不是另一个外壳的大多数功能。它不是一个明确的列表,也不包括每个可能的 shell 的每个可能的特性。只有在操作系统附带的版本中,或者如果它可以直接从标准发行版编译获得,则该功能才被视为在 shell 中。特别是下面指定的 C shell 是在 SUNOS 4.* 上可用的,相当多的供应商现在提供 tcsh 或他们自己的增强 C shell 代替(他们并不总是清楚地表明他们正在提供 tcsh。
代码:
sh csh ksh bash tcsh zsh rc es
Job control N Y Y Y Y Y N N
Aliases N Y Y Y Y Y N N
Shell functions Y(1) N Y Y N Y Y Y
"Sensible" Input/Output redirection Y N Y Y N Y Y Y
Directory stack N Y Y Y Y Y F F
Command history N Y Y Y Y Y L L
Command line editing N N Y Y Y Y L L
Vi Command line editing N N Y Y Y(3) Y L L
Emacs Command line editing N N Y Y Y Y L L
Rebindable Command line editing N N N Y Y Y L L
User name look up N Y Y Y Y Y L L
Login/Logout watching N N N N Y Y F F
Filename completion N Y(1) Y Y Y Y L L
Username completion N Y(2) Y Y Y Y L L
Hostname completion N Y(2) Y Y Y Y L L
History completion N N N Y Y Y L L
Fully programmable Completion N N N N Y Y N N
Mh Mailbox completion N N N N(4) N(6) N(6) N N
Co Processes N N Y N N Y N N
Builtin artithmetic evaluation N Y Y Y Y Y N N
Can follow symbolic links invisibly N N Y Y Y Y N N
Periodic command execution N N N N Y Y N N
Custom Prompt (easily) N N Y Y Y Y Y Y
Sun Keyboard Hack N N N N N Y N N
Spelling Correction N N N N Y Y N N
Process Substitution N N N Y(2) N Y Y Y
Underlying Syntax sh csh sh sh csh sh rc rc
Freely Available N N N(5) Y Y Y Y Y
Checks Mailbox N Y Y Y Y Y F F
Tty Sanity Checking N N N N Y Y N N
Can cope with large argument lists Y N Y Y Y Y Y Y
Has non-interactive startup file N Y Y(7) Y(7) Y Y N N
Has non-login startup file N Y Y(7) Y Y Y N N
Can avoid user startup files N Y N Y N Y Y Y
Can specify startup file N N Y Y N N N N
Low level command redefinition N N N N N N N Y
Has anonymous functions N N N N N N Y Y
List Variables N Y Y N Y Y Y Y
Full signal trap handling Y N Y Y N Y Y Y
File no clobber ability N Y Y Y Y Y N F
Local variables N N Y Y N Y Y Y
Lexically scoped variables N N N N N N N Y
Exceptions N N N N N N N Y
上表的关键。
Y Feature 可以使用这个 shell 来完成。
N 特征不存在于外壳中。
F Feature 只能通过使用 shells 函数机制来完成。
L 必须将 readline 库链接到 shell 才能启用此功能。
上表注释
1. This feature was not in the original version, but has since become
almost standard.
2. This feature is fairly new and so is often not found on many
versions of the shell, it is gradually making its way into
standard distribution.
3. The Vi emulation of this shell is thought by many to be
incomplete.
4. This feature is not standard but unofficial patches exist to
perform this.
5. A version called 'pdksh' is freely available, but does not have
the full functionality of the AT&T version.
6. This can be done via the shells programmable completion mechanism.
7. Only by specifying a file via the ENV environment variable.
ksh 有开源版本。你可以在 Linux 上运行它。有一个旧的用于 OSS 的 ksh,称为 pdksh,它的行为与新的 ksh 有所不同,这可能是人们不喜欢它的原因。
有几个不同之处 - bash 具有 ksh 的大部分功能,然后是一些额外的东西。编写为在 ksh 中运行的脚本可能会在 bash 中运行得很好。许多差异涉及数学、变量、数组、函数等...... - bash 似乎比 ksh 有更多的这些
ksh is available on multiple platforms by default but bash would have to be specifically added. On the flip side though, most Linux distros come with bash and you have to add ksh if you want it.
ksh 默认使用但不使用 bash 的 vi 样式编辑。但是,您可以在 bash 中键入“set -o vi”来获得相同的功能。
one reason for using ksh for scripting is, this shell is available on nearly all existing flavours of *nix. Bash is not installed by default on all *nix.