我应该使用什么Linux shell?

时间:2008-10-14 01:02:18

标签: linux shell

我使用过bash,csh和tcsh。但我问this question,Jonathan告诉我csh不值得信任。那么Linux shell有利于开发。为什么?

19 个答案:

答案 0 :(得分:62)

到目前为止,Linux上最常见的shell是bash。除非您有充分的理由使用替代方案,否则我建议您坚持使用bash,或者项目团队最常用的shell(或者您必须使用的大部分shell脚本)。

另一个非常常见的竞争者是破折号,它正在被Ubuntu项目广泛使用。

除了csh之外,这确实是个人偏好。

答案 1 :(得分:61)

我更喜欢zsh。

单独制作标签是值得的:

  • 如果你想要扩展通配符(当你想要删除目录中除一个文件之外的所有文件时很方便)
  • 指定程序后会给出一个开关列表
  • 在您正在使用的行下方提供标签完成选项,非常方便。

http://zsh.sourceforge.net/

答案 2 :(得分:27)

对于交互性,请使用Zsh。有一段时间我是Bash选项卡完成脚本的FreeBSD端口的维护者,但是当我第一次尝试Zsh时就放弃了它。它可以完成Bash所能做的一切,但更容易,更优雅。它也有很好的属性,具有非常类似Bash的击键,所以如果你在没有Zsh的系统上,你将能够做到(即使它不会“感觉”那么好)。

对于脚本,请使用Bourne Shell(sh)。它是POSIX标准脚本语言,您的脚本几乎可以保证在任何地方都可以使用。 Bash和Zsh以及其他shell有很好的扩展,你会错过,但那些将你绑定到特定的设置。忽略那些你个人使用的脚本的建议,你肯定你永远不会在其他地方运行,但请记住,这是一个你需要考虑的真正权衡。

但总的来说,Zsh。我不知道有谁试过没有立即和永久切换的人。它确实很好。

答案 3 :(得分:22)

Fish(友好交互式Shell)是大多数其他shell的不错选择。它具有一致的语法,漂亮的标签完成和语法高亮,易于拾取和使用(特别是如果你没有其他shell的习惯),并且具有出色的运行时帮助。

缺点是它不经常开发,有一个小的(但有用的)用户群,并且与其他shell非常不同。与shell惯用语的向后兼容性不是优先考虑的事项。

在很多情况下这很好......许多标准炮弹都有非常愚蠢的做事方式,因为它总是以这种方式完成。 “do / done”,“case / esac”,“if / fi”?这是鱼类消失的精神错乱。

值得一看。

答案 4 :(得分:18)

因为我相信我是那个建议你应该使用C Shell以外的东西的人,也许我应该略微限定我的评论,然后支持那些在Linux上使用bash,在其他平台上使用Korn shell的人(除非bash也安装在那里''。

与编辑器(您更喜欢vim还是emacs)相比,shell的选择部分是熟悉问题,部分是偏好问题。有许多人喜欢C shell,但我确实认为它比Bourne shell和衍生产品更容易编程。我的.cshrc中的内容实际上等同于exec /bin/ksh(因为我想执行一个登录shell - 一个读取配置文件的内容等等),但我不会谴责任何使用C shell或衍生产品的人如果是明智的决定。

如果您决定要使用C shell以外的其他东西,那么您基本上处于Bourne shell阵营中,其中POSIX标准或多或少地指定了预期的行为,然后是不同的shell - 也就是说, Bourne,Korn或Born Again shell - 添加(或者,在经典的Bourne shell的情况下,减去)一些功能。如果您的代码可能需要从Linux迁移到HP-UX,Solaris或AIX(经典的,AT& T衍生的Unix变体的幸存三重奏),那么您应该考虑确保在经典的Bourne shell中编写shell脚本,虽然Korn shell也很安全。但请注意,在Linux上你可以编写#!/bin/sh并获得Bash,在其他平台上,你将获得Bourne shell。

我在Korn shell和Bash之间切换没有出现重大问题 - 很少有小问题。我倾向于忽略那些没有明确界定的任何一种语言的角落 - 这往往意味着'在两者中都有定义'。使用Linux的人的另一个问题是GNU工具比传统的Unix版本有更多的选项,你可能失去可移植性,不是因为你使用的shell编程结构,而是因为你使用的命令选项。经验和随时访问其他系统的手册页有很大帮助。

答案 5 :(得分:8)

我通常坚持使用bash,因为它比直接sh更友好,并且它是我经常使用的每个发行版的默认值(SuSE,RHEL,Ubuntu,Slackware)。

但是,如果您计划编写可移植的shell脚本,请确保它们都在 real sh中运行。

答案 6 :(得分:6)

csh的问题在于它是脚本编写的废话,正如here所解释的那样。没有理由不将它用作交互式shell,但是大多数人发现在学习两个不同的shell并且无法在命令行上尝试使用它们的脚本时会感到困惑,因此最容易使用一切都一样。

交互式shell的明显候选者是bash,dash,zsh和{pd,} ksh。所有这些都实现了posix shell标准,并带有一些小的扩展。选择你喜欢的互动用途,我倾向于选择bash,因为它是linux上的标准,但它们都有它们的优点,特别是zsh看起来很受欢迎。

如果您正在编写一个打算可移植的脚本,请使用#!/ bin / sh,并确保使用标准的posix shell语法。如果它适用于bash和ksh,它可能是标准的。有一些旧版本的unix有一个非标准的/ bin / sh但我不会打扰它,除非你知道你必须这样做。更多的可移植性问题是您从脚本调用的所有命令行工具。

答案 7 :(得分:6)

击。这是标准。

答案 8 :(得分:4)

没有人提到基于Debian的sh标准,它是Debian Almquist shell dash。它完全符合POSIX标准,启动速度非常快,这就是Debian / Ubuntu将其用于/bin/sh的原因。

所以我使用bash作为我的交互式shell,但只使用dash来编写脚本。这样我知道我的脚本至少符合POSIX标准,并且可以在任何其他POSIX shell上运行。 ...我知道可移植性不仅仅是shell,而是我画线的地方。

答案 9 :(得分:3)

我不是Ruby用户,但http://rush.heroku.com/看起来很有趣

答案 10 :(得分:3)

最好坚持使用bash,因为它是最广泛使用的shell,任何教程或帮助你可能会从某人那里获得很可能会使用bash。但是,我已经开始在我的所有脚本中使用zsh,并且我发现它在脚本编写方面远远优于bash。

答案 11 :(得分:2)

只是不要使用Korn Shell(ksh)。

除非你有完美的输入,否则永远不需要使用退格键。

答案 12 :(得分:1)

我一直使用pdksh而没有任何接近完美打字的东西(也许你需要修复你的termcap?)。

ksh是标准,csh是标准,bash是'标准',但仅限Linux。最好以ksh为目标。

答案 13 :(得分:1)

我实际上喜欢ksh。它比bash更加一致,因为它不会尝试支持任何csh结构。根据我的经验,tcsh与其他shell最不兼容,我避免使用它。我尝试将脚本写入sh,但是ksh确实有一些很好的功能,比如在一行上导出和设置变量。我也尝试保持与bash的兼容性,因为它功能齐全且常见。要编写便携式shell脚本,这比选择“最佳”shell更重要,您可以参考本书。

便携式外壳程序设计:Bruce Blinn的大量Bourne Shell示例集(HP Professional Series)(平装 - 1995年10月29日) amazon.com

答案 14 :(得分:1)

对于编写实际脚本,我更喜欢ksh,它有几个对编程和修复one of my pet annoyances有用的扩展。

bash是我对互动会话的偏好,但这更多的是个人偏好而不是其他任何事情。请确保它是Bourne类型的shell。

答案 15 :(得分:1)

我也来自csh,tcsh到bash。它有所不同,但过了一段时间,至少和c-shell一样好。

对于Scripting,我建议使用ksh,因为它可以在大多数Unix上使用(Solaris,HP-UX,OSF / 1(最好的UNIX;) - 因为它的时间))它具有很好的功能。使用Korn,您可以编写大部分脚本。 Sporadicaly你想获得更多的数字,作为函数的返回值,或者你有一些你不能放在一个简单的数组中的数据,或者你需要一些在regegs的情况下有更好的能力,或者什么,然后我会建议perl。

答案 16 :(得分:1)

对于脚本编写,请尝试使用dash一段时间,以便对可移植的内容有一个良好的感觉。如果您使用bash编写shell脚本,请在脚本shebang中明确声明bash。

为了您的个人控制台使用,请试验那里的内容。找一些你觉得舒服的东西。通过挑选一个必须从源代码编译的shell来为你需要使用它的每台机器,让你的所有系统管理员朋友变得古怪和烦恼。

答案 17 :(得分:0)

我认为FISH是最好的,有语法高亮(对于不存在的命令)并且它可以自动填充。这很容易学习。

答案 18 :(得分:-3)

选择一个: 一个。 tcsh的 湾KSH C。 zsh的 d。登录 即bash的

我会使用登录。只是在说。