代码之家  ›  专栏  ›  技术社区  ›  Scottie T

我应该使用什么linux shell?[关闭]

  •  53
  • Scottie T  · 技术社区  · 16 年前

    我用过bash,csh和tcsh。但我问 this question 乔纳森告诉我CSH是不可信任的。所以什么样的linux shell有利于开发。为什么?

    19 回复  |  直到 9 年前
        1
  •  62
  •   Kyle Burton    11 年前

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

    另一个非常常见的竞争者是dash,它正被ubuntu项目越来越广泛地使用。

    这确实是个人喜好,除了 csh .

        2
  •  61
  •   SomeDork    16 年前

    我更喜欢zsh。

    单是完成选项卡就值得:

    • 如果需要,它会扩展通配符(当您想删除目录中除一个文件以外的所有文件时,它很方便)
    • 在指定一个程序后将给您一个开关列表
    • 在正在处理的行下面提供制表符完成选项,这非常方便。

    http://zsh.sourceforge.net/

        3
  •  27
  •   Kirk Strauser    16 年前

    对于交互性,请使用zsh。有一段时间,我是bash tab完成脚本的freebsd端口的维护者,但当我第一次尝试zsh时就放弃了它。它可以做任何bash可以做的事,但更容易和更优雅。它还有一个很好的特性,就是有非常像bash的击键,所以如果你在一个没有zsh的系统上,你就可以做到(即使它不会“感觉”那么好)。

    对于脚本,请使用bourne shell(sh)。它是POSIX标准脚本语言,您的脚本几乎可以保证在任何地方都能工作。bash、zsh和其他shell都有很好的扩展,您可能会错过这些扩展,但它们会将您绑定到特定的设置。忽略那些只供个人使用的脚本,你肯定不会在别处运行,但要记住,这是你需要考虑的真正的折衷。

    但总而言之,是的。我不知道有谁试过,但没有立即和永久地改变。真是太好了。

        4
  •  22
  •   Rhubbarb    11 年前

    Fish (友好的交互shell)是大多数其他shell的一个不错的替代品。它具有一致的语法、良好的制表符完成和语法突出显示,易于获取和使用(特别是如果您没有来自其他shell的习惯),并且具有出色的运行时帮助。

    缺点是它的开发不稳定,用户基数小(但有帮助),而且与其他shell非常不同。与shell习惯用法的向后兼容性不是优先考虑的问题。

    在很多情况下这是好的…很多标准的shell都有非常愚蠢的做事方式,只是因为它总是这样做的。”do/done“,”case/esac“,”if/fi“?这是鱼做的疯狂。

    值得一看。

        5
  •  18
  •   Jonathan Leffler    16 年前

    既然我相信我是那个建议你使用C shell以外的东西的人,也许我应该稍微限定一下我的评论,然后支持那些说“Linux上的bash,其他平台上的korn shell(除非bash也安装在那里)”的人。

    更像是编辑(你更喜欢 vim emacs ,贝壳的选择一部分是熟悉的问题,一部分是偏好的问题。有很多人喜欢c shell,尽管我相信它比bourne shell及其衍生物更不容易编程。我在我的.cshrc中所拥有的,实际上,相当于 exec /bin/ksh (这并不是完全相同的,因为我想执行一个登录shell——一个读取配置文件的shell等等),但如果这是一个明智的决定,我不会谴责任何人使用c shell或派生程序。

    如果您决定使用C shell以外的其他东西,那么您基本上是在Bourne shell阵营中,POSIX标准或多或少地指定了预期的行为,然后不同的shell(即Bourne、Korn或Born Reagain shell)添加(或者经典的伯恩贝壳,减去)一些特点。如果您的代码可能需要从linux迁移到hp-ux、solaris或aix(经典的、at&t派生的unix变体中幸存的三个),那么您应该考虑确保用经典的bourne shell编写shell脚本,尽管korn shell也非常安全。不过,请注意,在linux上可以编写 #!/bin/sh 在其他平台上,你会得到bourne shell。

    我在korn shell和bash之间切换没有大问题,很少有小问题。我倾向于避开这两种语言中那些没有很好定义的角落——这往往意味着“两者都有定义”。对于那些使用linux的人来说,另一个问题是gnu工具比经典的unix版本有更多的选项,并且您可能会失去可移植性,这不是因为您使用的shell编程结构,而是因为您使用的命令选项。经验和随时访问其他系统的手册页有很大帮助。

        6
  •  8
  •   warren    16 年前

    我通常坚持使用bash,因为它比直接使用sh更友好,而且它是我半定期使用的每个发行版(suse、rhel、ubuntu、slackware)的默认版本。

    但是,如果您计划编写可移植的shell脚本,请确保它们都在 真实的 嘘。

        7
  •  6
  •   Paul Nathan    16 年前

    猛击。这是标准的。

        8
  •  6
  •   Mark Baker    16 年前

    csh的问题在于,它不适合脚本编写,如前所述 here . 没有什么真正的理由不应该将它用作交互式shell,但是大多数人发现,学习两个不同的shell和不能在命令行上尝试它们的脚本是令人困惑的,所以对所有东西使用相同的shell是最容易的。

    交互shell的明显候选者是bash、dash、zsh和{pd,}ksh。所有这些都实现了posix外壳标准,并带有一些小的扩展。选择任何你喜欢的交互使用,我倾向于使用bash,因为它是linux上的标准,但它们都有各自的优点,zsh特别受欢迎。

    如果你正在写一个脚本,你打算是便携式的,使用!/bin/sh,并确保使用标准posix shell语法。如果对bash和ksh都有效,那可能是标准的。有一些旧版本的unix有一个非标准的/bin/sh,但是除非你知道你必须这样做,否则我不会介意。对于可移植性来说,更大的问题是从脚本调用的所有命令行工具。

        9
  •  4
  •   J. M. Becker    13 年前

    没有人提到基于debian的标准 sh ,它是德比亚阿尔姆奎斯特贝壳 dash . 它完全符合posix,启动速度非常快,这就是debian/ubuntu使用它的原因 /bin/sh .

    所以我用 bash 对于我的交互式shell,但仅限于 短跑 对于脚本。这样我就知道我的脚本至少符合posix,并且将在任何其他posix shell上运行。…我知道可移植性不仅仅是外壳,但它是我的底线。

        10
  •  3
  •   Soft    16 年前

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

        11
  •  3
  •   user34292    16 年前

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

        12
  •  2
  •   TM. Randy Simon    16 年前

    不要使用korn shell(ksh)。

    除非你有完美的打字,而且不需要使用退格键。

        13
  •  1
  •   Jason Catena    16 年前

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

    便携式shell编程:bruce blinn的大量bourne shell示例(hp professional series)(平装本-1995年10月29日) amazon.com

        14
  •  1
  •   james2vegas    16 年前

    我一直使用pdksh,没有任何接近完美的输入(也许你需要修复你的termcap?).

    ksh是标准,csh是标准,bash是“标准”,但仅在linux上。最好瞄准克什米尔。

        15
  •  1
  •   Community CDub    8 年前

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

    bash 是我对互动会话的偏好,但这更多的是个人偏好的问题。只是要确定它是伯恩式的贝壳。

        16
  •  1
  •   user224243    15 年前

    我也是从csh,tcsh来的。这是不同的,但过了一段时间,至少和c-shell一样好。

    对于脚本编写,我建议使用ksh,因为它在大多数unix(solaris、hp-ux、osf/1(有史以来最好的unix;)—目前)上都可用,而且它有很好的特性。使用korn,您可以编程大多数脚本。sporadicaly您希望从函数中获得比数字更多的返回值,或者您有一些不能放在简单数组中的数据,或者您需要一些在regegs或其他情况下具有更好功能的数据,那么我建议使用perl。

        17
  •  1
  •   Sam Rodgers    15 年前

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

    对于你的个人游戏机,尝试一下外面的东西。找到你喜欢的东西。请保持古怪,并恼怒所有系统管理员朋友拿起一个外壳,必须从源代码中编译的每一台机器,你想使用它。

        18
  •  0
  •   luke's programmer    9 年前

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

        19
  •  -3
  •   user4344012    10 年前

    选择一个: A. TCSH KSH CZH D.登录 巴什

    我会使用登录。只是说说而已。