我应该使用哪个Linux shell?
我用过bash,csh和tcsh。 但是我问了这个问题 ,Jonathan告诉我csh是不可信的。 那么Linux的shell有什么好处呢。 为什么?
到目前为止,Linux上最常见的shell是bash。 除非你有充分的理由来使用替代scheme,否则我会build议你坚持使用bash或项目团队最常用的shell(或者你必须使用的大部分shell脚本)。
唯一的另一个非常常见的竞争者是破折号,它正在越来越多地被Ubuntu项目所使用。
这实际上是个人喜好,除了csh 。
我更喜欢zsh。
单独完成制表符是值得的:
- 如果你想要扩展通配符(当你想删除一个目录下的所有文件时很方便)
- 指定程序后会给你一个开关列表
- 在您正在处理的行下面提供制表符完成选项,这非常方便。
为了交互性,使用Zsh。 有一段时间我是Bash tab完成脚本的FreeBSD端口的维护者,但是一旦我第一次尝试了Zsh,就放弃了它。 它可以做一切Bash可以做,但更容易,更优雅。 它也具有非常好的Bash式按键的属性,所以如果你在一个没有Zsh的系统上,你将能够做到(即使它不会“感觉”那么好)。
对于脚本,使用Bourne Shell(sh)。 这是POSIX标准的脚本语言,你的脚本几乎可以保证在任何地方工作。 Bash和Zsh和其他shell有很好的扩展名,你会错过但是那些绑定到一个特定的设置。 忽略那些仅供个人使用的脚本的build议,您肯定不会在其他地方运行,但请记住,这是您需要考虑的一个真正的折衷scheme。
但总之,Zsh。 我不知道有谁试过,谁也没有立即改变。 这真的很好。
鱼 (Friendly Interactive Shell)是大多数其他shell的不错select。 它具有一致的语法,很好的制表符完成和语法突出显示,很容易拾取和使用(特别是如果你没有其他shell的习惯),并具有良好的运行时帮助。
不利的一面是,它的发展不规律,有一个小的(但有帮助的)用户基础,并且与其他的shell非常不同。 与shell语言的向后兼容性不是优先事项。
在许多情况下,这是很好的…很多标准的shell有很愚蠢的做法,只是因为它总是这样做的。 “do / done”,“case / esac”,“if / fi”? 这是鱼消除的疯狂。
值得一看。
因为我相信我是build议你使用C Shell以外的东西的人,也许我应该稍微评论一下我的话,然后支持那些在Linux上使用bash,在其他平台上使用Korn shell(除非安装了bash)那里也是)'。
而不是编辑(你更喜欢vim
还是emacs
),shell的select部分是熟悉的问题,部分是偏好问题。 有很多人喜欢C shell,尽pipe我确实相信它比Bourne shell和衍生产品更不易编程。 我在.cshrc中的确和exec /bin/ksh
是等价的(因为我想执行一个loginshell – 一个读取configuration文件等等),但是我不会谴责任何人使用C shell或衍生工具,如果这是一个明智的决定。
如果你决定要使用C shell以外的东西,那么你基本上就在Bourne shell阵营中,对于这个阵营POSIX标准或多或less地指定了预期的行为,然后是不同的炮弹 – 也就是Bourne,Korn或重新生成炮弹 – 添加(或者,在经典的Bourne炮弹的情况下,减去)一些特征。 如果您的代码可能需要将Linux迁移到HP-UX,Solaris或AIX(经典AT&T衍生的Unix变种的幸存三重奏),那么您应该考虑确保在经典的Bourne shell中编写shell脚本,尽pipeKornshell也很安全。 但是请注意,在Linux上,您可以编写#!/bin/sh
并在其他平台上获得Bash,您将获得Bourne shell。
我在Korn shell和Bash之间切换,没有什么大问题,而且很less遇到小问题。 我倾向于避开那些没有明确定义的任何一种语言的angular落 – 这往往意味着“在两者中定义”。 使用Linux的另一个问题是,GNU工具比传统的Unix版本有更多的select,你可能会失去可移植性,不是因为你使用的是shell编程结构,而是因为你使用了命令选项。 经验和准备访问其他系统的手册页有很大的帮助。
我通常坚持bash,因为它比直接sh更友好,而且它是我经常使用的每个发行版(SuSE,RHEL,Ubuntu,Slackware)的默认设置。
但是,如果您打算编写可移植的shell脚本,请确保它们都以真实的方式运行。
击。 这是标准的。
csh的问题在于它是脚本的垃圾,正如这里所解释的。 没有什么真正的理由不把它当作交互式shell使用,但是大多数人觉得要学习两个不同的shell并且不能在命令行中尝试一些脚本,所以最简单的方法就是使用一切都一样。
交互式shell的明显候选者是bash,dash,zsh和{pd,} ksh。 所有这些都实现了posix shell标准,并有一些小扩展。 select你喜欢的交互式使用,我倾向于使用bash只是因为它是Linux上的标准,但他们都有自己的优点和zsh特别似乎stream行。
如果你正在编写一个脚本,你可以使用#!/ bin / sh,并确保使用标准的posix shell语法。 如果它在bash和ksh上都有效,那可能是标准的。 有一些旧版本的unix有一个非标准的/ bin / sh,但我不会打扰,除非你知道你必须。 可移植性的更多问题是您从脚本调用的所有命令行工具。
没有人提到基于Deb的标准sh
,它是Debian Almquist的shell dash
。 它完全符合POSIX标准,启动速度非常快,这就是为什么Debian / Ubuntu将它用于/bin/sh
。
所以我使用bash
作为我的交互式shell,但是只能用于脚本。 这样我知道我的脚本至less符合POSIX,并且可以在任何其他POSIX shell上运行。 …我知道可移植性不仅仅是壳,而是它在哪里画线。
最好是坚持使用bash,因为它是使用最广泛的一个shell,任何教程或帮助你从某人那里得到的东西都可能使用bash。 不过,我已经开始对我的所有脚本使用zsh,并且发现它在脚本方面远远优于bash。
只是不要使用Korn Shell(ksh)。
除非你有完美的打字,并且永远不需要使用退格键。
我不是Ruby大用户,但http://rush.heroku.com/看起来很有趣;
我实际上喜欢ksh。 它比bash更一致,因为它不会尝试支持任何csh结构。 根据我的经验,tcsh与其他shell不兼容,我避免这种情况。 我尝试编写脚本sh,但ksh确实有一些很好的function,例如在一行中导出和设置variables。 我也尝试保持与bash的兼容性,因为它是全function和常见的。 要编写可移植的shell脚本,比select“最好”的shell更重要,你可以参考这本书。
可移植Shell编程:Bourne Shell示例的丰富集合(HP专业系列)by Bruce Blinn(平装 – 1995年10月29日) amazon.com
我一直使用pdksh而没有任何接近完美的input(也许你需要修复termcap?)。
ksh是标准的,csh是标准的,bash是“标准的”,但只在linux上。 更好地目标ksh。
为了编写实际的脚本,我更喜欢ksh
,它有几个扩展用于编程,并修复了我的一个宠物烦恼 。
bash
是我对交互式会话的偏好,但这更多的是个人喜好,而不是其他任何事情。 只要确定它是一个Bournetypes的shell。
我也从csh,tcsh到bash。 这是不同的,但过了一段时间,至less和C壳一样好。
对于脚本,我会推荐ksh,因为它在大多数Unix(Solaris,HP-UX,OSF / 1(有史以来最好的UNIX;) – 现在是时候)上都可用,而且它有很好的function。 使用Korn,您可以编写大部分脚本。 Sporadicaly,你想获得更多的数字,作为函数的返回值,或者你有一些数据,你不能放在一个简单的数组,或者你需要一些有更好的function,如果regegs,或者什么,那么我会build议perl。
对于脚本,尝试使用短跑一段时间,以获得什么是便携式的良好感觉。 如果你使用bash编写shell脚本,请在脚本中显式声明bash。
为了您的个人控制台的使用,尝试一下。 find一些你感觉舒服的东西。 把所有你的系统pipe理员的朋友弄成怪异的,拿起一个必须从源代码编译的shell来处理你所使用的每一台机器。
我认为FISH是最好的,有语法突出显示(对于不存在的命令),它可以自动填充。 这是很容易学习。
select一个:a。 tcsh b。 ksh c。 zsh d。 logine。 庆典
我会用login。 只是在说。