Unix shell的比较

在主要的Unix shell(bash,ksh,tcsh,zsh等)中,是否有任何令人信服的理由来使用它们?

  • 哪个是最具交互性/命令行友好的?
  • 编写脚本最有利/直观的是哪一个?
  • 是否有一个shell提供的其他主要的内置function?
  • 这些贝壳中的任何一种对于一种function来说真的很好,但是不是另一种呢? 还是他们都非常全面/灵活?
  • 这只是个人喜好的问题吗?

如果有人愿意,我可以制作这个社区wiki。

当前:

  • bash – 在大多数Linux发行版中,Bourne再次shell,默认shell。 体面function;
  • zsh – function最丰富,但仍然很less使用;
  • ksh – 在Solaris,AIX等其他几个unices下的默认shell;
  • tcsh – 各种* BSD风味单位的默认shell;

历史性:

  • sh – 原创Bourne shell(1977年发行)。 由bash过时;
  • csh – 原始的C shell(1978年发布)。 被tcsh和ksh所过时;

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

function图 (wiki)。

鱼是一个比其他人更有趣的新壳,不是因为它必然有更多的特征,而是因为它们默认工作,并且因为鱼争取可用性。

一些截图( 1,2,3,4 )足以给出一般的想法。

鱼现在是我的Mac上工作的默认shell。 去搞清楚。

如果你要学习sh / bash以外的shell,那么你可以使用zsh 。 我不认为有人认为这是最强大和function最齐全的替代炮弹。 当然,是否膨胀呢还有待辩论。

我听说过有关fish好处,但从来没有努力去打扰他们。

我知道的pipe理员认为cshtcsh是可憎的,应该不惜一切代价避免,我同意他们,尽pipe从来没有被迫把我自己的任何壳。

我会build议知道bash,因为它是最常见的(通常是Linux默认)之一。 就我个人而言,我喜欢zsh作为我的交互式shell。 它有很大的完成function。 例如,你可以设置一个主机列表,当你做一些像ssh Ser [tab]的时候,它会知道尝试自动完成其中的一个主机。 它也有recursionglobing,所以如果你想在当前和子目录中find所有的jpeg文件,你可以使用ls -ld **/*.jpg 。 zsh(search人们的.zshrc文件)有许多有趣的function,你可以将它设置为'bash compatible',所以很容易在两者之间切换。 如果你把它和GNU Screen结合起来,你可能会发现命令行变得非常愉快。

不要忘了你的其他问题最常见的Unix / Linuxshell – 最stream行的shell可能是最受欢迎的原因;-)

对于什么是值得的,大多数人不经常closuresshell,所以很难全面比较各种选项。 你会更有可能看到不同的人支持他们最喜欢的炮弹的美德。 从我听到的关于不同的炮弹的东西,他们都提供了一些相同的基本function(如I / Oredirect,命令历史等),所以个人偏好可能是一个大的组成部分。

使用尚未提及的ZSH的令人信服的理由是vi模式和emacs模式

对于那些喜欢在shell中使用vi肌肉记忆的人来说,这是一个杀手锏。

而对于那些喜欢emacs的人,也可以使用这些键绑定,但真正的emacs-believers可能会说emacs是他们最喜欢的shell。

😉

日常使用的偏好实际上是一种个人品味,但是在编写脚本时,为了便于携带,我尝试使用posix。

就像头一样:Ubuntu默认“sh”到“dash”,这导致了过去POSIX兼容性方面的一些问题。 显然,回声命令略有不同。