Unix shell的比较


9

在主要的Unix shell(bash,ksh,tcsh,zsh等)中,是否有令人信服的理由相互使用?

  • 哪个是最互动/命令行友好的?
  • 哪种最有益/最直观的脚本编写方式?
  • 一个外壳提供了其他外壳没有提供的主要内置功能吗?
  • 这些外壳中的任何一个对某一种功能真的有用,但对另一种功能不是真的吗?还是它们都相当全面/灵活?
  • 这只是个人喜好吗?

如果有人愿意,我可以制作此社区Wiki。

Answers:


17

当前:

  • bash再次使用Bourne shell,这是大多数Linux发行版中的默认shell。体面的功能;
  • zsh —功能最丰富,但仍很少使用;
  • ksh — Solaris,AIX和其他一些unice中的默认shell;
  • tcsh —各种* BSD风格的unice中的默认外壳;

历史性:

  • sh-原始的伯恩贝壳(1977年发行)。被bash淘汰;
  • csh—原始的C shell(1978年发布)。被tcsh和ksh淘汰;

请注意,bash,ksh和zsh源自sh语法,而tcsh源自csh语法。这是两种完全不同的语法。

功能表(Wiki)。


大多数脚本通常被编写为与sh兼容,因为通过sh启动脚本通常比bash快得多。
Mikeage,

怎么样?在Linux上,/ bin / sh是/ bin / bash的符号链接。
vartec,2009年

2
/ bin / sh并非始终是/ bin / bash的符号链接
布拉德·吉尔伯特

1
当将bash实例化为“ sh”时,它以“ sh”模式运行,该模式支持bash命令的子集。我相信“ sh”语法是POSIX标准。
duffbeer703'2009年

在Debian上,您可以使用'dash'代替'/ bin / sh'。
drybjed

9

fish是一个新的外壳,也许比其他外壳更有趣,这不是因为它必然具有更多功能,而是因为默认情况下它们只是工作而已,并且因为fish追求可用性。

少数的截图(1234)是足以给一般的想法。

fish现在是Mac上工作时的默认外壳。去搞清楚。


2

如果要学习sh/ 以外的shell bash,不妨直接使用zsh。我认为没有人会严重质疑它是替代shell中功能最强大,功能最丰富的东西。当然,这只是膨胀还是有待商debate。

我听说过有关的好消息fish,但从未努力去打扰他们。

该管理员,我知道考虑cshtcsh了应该不惜一切代价避免憎恶,我从来尽管已经被迫把自己通过两种外壳同意他们的观点。


2

我建议您很好地了解bash,因为它是最常见的一种(通常是Linux的默认设置)。就个人而言,我喜欢zsh作为我的交互式外壳。它具有出色的完成功能。例如,您可以设置主机列表,当您执行ssh Ser [tab]之类的操作时,它将知道尝试使用Tab键自动完成其中一台主机。它还具有递归的gloglo,因此,如果要在当前目录和子目录中找到所有jpeg文件,可以使用ls -ld **/*.jpg。zsh(搜索人们的.zshrc文件)有很多有趣的功能,您可以将其设置为“与bash兼容”,因此很容易在两者之间进行切换。如果将其与GNU屏幕结合使用,您可能会发现使用命令行非常愉快。


1

不要忘记您的其他问题最常见的Unix / Linux shell-出于某种原因,最受欢迎的shell可能最受欢迎;-)

值得一提的是,大多数人不会经常在shell之间切换,因此很难对各种选项进行全面的比较。您将更有可能看到不同的人拥护他们最喜欢的贝壳的优点。从对不同Shell的了解中,我几乎没有听说过,它们都提供了一些相同的基本功能(例如I / O重定向,命令历史记录等),因此个人喜好可能是一个很大的组成部分。


1

未提及使用ZSH的一个令人信服的原因是vi模式和emacs模式

对于那些喜欢在外壳中使用其肌肉记忆的人来说,这是一个杀手feature。

对于喜欢emacs的用户,您也可以使用这些键绑定,但是真正的emacs信奉者可能会说emacs是他们最喜欢的shell。

;-)


0

每天使用的偏爱确实是个人喜好,但是,在编写脚本时,出于可移植性的考虑,我尝试遵循posix。


0

就像抬起头来一样:Ubuntu默认将“ sh”设置为“ dash”,这在过去导致了POSIX兼容性的一些问题。显然,echo命令略有不同。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.