UNIX shell中有什么好东西没有BASH?

时间:2009-02-22 04:01:42

标签: bash unix shell

自从我使用Unix-Linux / Solaris以来,我一直在使用'bash'。现在,我有兴趣知道像'ksh','zsh'这样的shell更好吗? '极客'使用什么?

8 个答案:

答案 0 :(得分:5)

我偏爱zsh(它就像是ksh和bash的混合)。 guide对其功能有一个很好的概述。这个page有一个漂亮的图表,显示了不同shell中不同功能的可用性。

答案 1 :(得分:3)

  • bash:根据我的经验,大多数人使用bash,部分原因是它是大多数Linux系统中的标准shell。

  • ksh:很多Solaris系统都使用ksh,但这似乎对bash失去了普及。

  • csh:Csh曾经更受欢迎,但通常被tcsh取代。对于那些对c语法非常熟悉的人来说,tcsh并不坏。

  • zsh:我没有使用zsh,但它似乎功能非常丰富。

就个人而言,我更喜欢bash,因为它几乎安装在所有与Unix兼容的操作系统上,它非常通用,是一个简单的命令行工具和脚本语言之间的良好折衷。

答案 2 :(得分:2)

Bash最好知道最广泛的兼容性,你可以基本上坐在任何Unix上,它会在那里。

Zsh可能是最现代的贝壳之一。你可以用它做各种疯狂有趣的事情

答案 3 :(得分:1)

我首选使用ksh93。这意味着ksh的基础知识几乎可以在我发现的任何系统上使用,因此我的交互式体验和98%的复杂配置文件保持不变。

答案 4 :(得分:1)

bash有点慢,但与许多FSF程序一样,它试图整合所有已知功能。我使用ksh93,它与bash大致融合。 ksh的主要优点是它有一个很好的接口,用于使用C代码扩展shell。它也更容易定制,例如,使tab键可以在上下文中执行任何操作。缺点是命令完成不是内置的;你必须编程。

避免csh及其衍生物: - )

答案 5 :(得分:1)

根据我的经验,标准Unix shell(对我而言,cshshksh)的好处很少,至少也不存在bash中的等效表格。因此,只要您感觉bash将在您的所有计算机上使用,您也可以使用它来获得最大功能。

OTOH,如果你想处理可移植性,你可能会使用ksh,它与POSIX标准非常接近 - 有一些扩展(bash也非常接近POSIX标准,但有更多扩展)。

我非常喜欢POSIX $(cmd)符号来代替经典的反向标记

`cmd`

(这在Markdown中并不好玩!)。喜欢它的一个主要原因是嵌套调用要容易得多:

gcclib=$(dirname $(dirname $(which gcc)))/lib

在一行中使用反向标记进行正确操作是非常愚蠢的,以至于您不会尝试将其变为单行。这是kshbash;它不在经典的Bourne shell中(/bin/sh,但要注意某些机器上的/bin/sh不是经典的Bourne shell,而是伪装成bash),也不是C shell。 / p>

答案 6 :(得分:1)

如果你正在使用bash并且对它感到满意,则无需立即更改。这是一个很好的外壳。了解它的历史也告诉你一些关于它的事情:Bourne Again SHell。制作比C-Shell及其衍生产品(如tcsh)更好的shell是一个很好的尝试,允许你使用/ bin / sh语法进行脚本编写(或用于交互式),但是添加了csh的一些更好的功能(如历史等)。

无论如何,Korn shell和Bash在概念上有很多共同之处。就像/ bin / sh一样,Korn shell最初来自AT& T,直到最近才开源。它具有良好的历史记录机制,并对历史状态文件进行文件锁定,因此如果它们安装在网络文件服务器上,则shell的多个副本将正确写入历史文件而不会相互冲突。它还支持/ bin / sh语法,并结合了/ bin / csh的一些优点。 ksh有很多,如果你能找到它,它通常是一个非常好的shell。我以前在Solaris上使用它,特别是在我在Sun工作时。我不想安装操作系统没有的任何东西,因为我每周安装几次新操作系统,所以这是一个不错的选择。

现在我使用Bash或zsh。我更喜欢zsh,因为它具有丰富的命令完成功能和一般编写shell函数(对于我的交互式shell - 在编写脚本时,我坚持使用非常标准的Bourne shell东西)。

正如其他人所说,最好避免使用任何版本的C-shell,除了那些为你提供/ bin / csh功能但不是从/ bin / csh代码派生的shell。

答案 7 :(得分:0)

我有一个装配好来提供每个会话的shell历史记录。

这里独一无二的是每个窗口都有自己的shell历史。很方便。