我用过bash,csh和tcsh.但我问了这个问题,Jonathan告诉我csh不值得信任.那么Linux shell有利于开发.为什么?
到目前为止,Linux上最常见的shell是bash.除非你有充分的理由使用替代方案,否则我建议坚持使用bash,或者项目团队最常用的shell(或者你必须使用的大部分shell脚本).
唯一的另一个非常常见的竞争者是破折号,它正在被Ubuntu项目广泛使用.
这真的是个人偏好,除了csh.
我更喜欢zsh.
完成标签完成是值得的:
如果需要,它会扩展通配符(当您想要删除目录中除一个文件之外的所有文件时很方便)
在指定程序后会给你一个开关列表
在您正在处理的行下方提供选项卡完成选项,这非常方便.
http://zsh.sourceforge.net/
对于交互性,请使用Zsh.有一段时间我是Bash选项卡完成脚本的FreeBSD端口的维护者,但是当我第一次尝试Zsh时就放弃了它.它可以完成Bash所能做的一切,但更容易,更优雅.它也有很好的属性,具有非常类似Bash的击键,所以如果你在没有Zsh的系统上,你将能够做到(即使它不会"感觉"那么好).
对于脚本,请使用Bourne Shell(sh).它是POSIX标准脚本语言,您的脚本几乎可以保证在任何地方都可以使用.Bash和Zsh以及其他shell有很好的扩展,你会错过,但那些将你绑定到特定的设置.忽略那些你个人使用的脚本的建议,你肯定你永远不会在其他地方运行,但请记住,这是一个你需要考虑的真正的权衡.
但总的来说,Zsh.我不知道有谁试过没有立即和永久切换的人.真的很棒.
Fish(友好交互式壳牌)是大多数其他炮弹的不错选择.它具有一致的语法,很好的标签完成和语法高亮,易于拾取和使用(特别是如果你没有其他shell的习惯),并具有出色的运行时帮助.
缺点是它不经常开发,有一个小的(但有用的)用户群,并且与其他shell非常不同.向后兼容shell惯用语不是优先考虑的问题.
在很多情况下这很好......许多标准的炮弹都有非常愚蠢的做事方式,因为它总是以这种方式完成."do/done","case/esac","if/fi"?这是鱼类消失的精神错乱.
值得一看.
因为我相信我是那个建议你应该使用C Shell以外的东西的人,也许我应该略微限定我的评论,然后支持那些在Linux上使用bash,在其他平台上使用Korn shell的人(除非安装了bash)那里也是''.
相比编辑(你更喜欢vim
或是emacs
),shell的选择部分是熟悉问题,部分是偏好问题.有许多人喜欢C shell,但我确实认为它比Bourne shell和衍生产品更容易编程.我的.cshrc中的内容实际上等同于exec /bin/ksh
(它不同于因为我想执行一个登录shell - 一个读取配置文件等等),但我不会谴责任何人使用C shell或者如果是知情决定的衍生物.
If you decide that you want to use something other than C shell, then you are basically in the Bourne shell camp, for which the POSIX standard more or less specifies the expected behaviour and then the different shells -- that is, the Bourne, Korn or Born Again shells -- add (or, in the case of the classic Bourne shell, subtract) a few features. If your code might ever need to move off Linux to HP-UX, Solaris or AIX (the surviving trio of the classic, AT&T-derived Unix variants), then you should consider ensuring you write your shell scripts in classic Bourne shell, though Korn shell is also pretty safe. Note, though, that on Linux you can write #!/bin/sh
and get Bash, on the other platforms, you will get Bourne shell.
我在Korn shell和Bash之间切换没有出现重大问题 - 很少有小问题.我倾向于忽略那些没有明确界定的任何一种语言的角落 - 这往往意味着'在两者中都有定义'.使用Linux的人的另一个问题是GNU工具比传统的Unix版本有更多的选项,你可能会失去可移植性,不是因为你使用的shell编程结构,而是因为你使用的命令选项.经验和随时访问其他系统的手册页有很大帮助.
我通常坚持使用bash,因为它比直接sh更友好,并且它是我经常使用的每个发行版的默认设置(SuSE,RHEL,Ubuntu,Slackware).
但是,如果您计划编写可移植的shell脚本,请确保它们都是真正运行的.
击.这是标准的.
与CSH的问题是,它是对脚本废话,如解释在这里.没有理由不将它用作交互式shell,但是大多数人发现在学习两个不同的shell并且无法在命令行上尝试使用它们的脚本时会感到困惑,因此最容易使用一切都一样.
交互式shell的明显候选者是bash,dash,zsh和{pd,} ksh.所有这些都实现了posix shell标准,并带有一些小的扩展.选择任何你喜欢的互动用途,我倾向于选择bash,因为它是linux上的标准,但它们都有它们的优点,特别是zsh似乎很受欢迎.
如果您正在编写一个打算可移植的脚本,请使用#!/ bin/sh,并确保使用标准的posix shell语法.如果它适用于bash和ksh,它可能是标准的.有一些旧版本的unix有一个非标准的/ bin/sh但我不会打扰它,除非你知道你必须这样做.更多的可移植性问题是您从脚本调用的所有命令行工具.