自从我使用Unix-Linux / Solaris以来,我一直在使用'bash'。现在,我有兴趣知道像'ksh','zsh'这样的shell更好吗? '极客'使用什么?
答案 0 :(得分:5)
答案 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(对我而言,csh
,sh
,ksh
)的好处很少,至少也不存在bash
中的等效表格。因此,只要您感觉bash
将在您的所有计算机上使用,您也可以使用它来获得最大功能。
OTOH,如果你想处理可移植性,你可能会使用ksh
,它与POSIX标准非常接近 - 有一些扩展(bash也非常接近POSIX标准,但有更多扩展)。
我非常喜欢POSIX $(cmd)
符号来代替经典的反向标记
`cmd`
(这在Markdown中并不好玩!)。喜欢它的一个主要原因是嵌套调用要容易得多:
gcclib=$(dirname $(dirname $(which gcc)))/lib
在一行中使用反向标记进行正确操作是非常愚蠢的,以至于您不会尝试将其变为单行。这是ksh
和bash
;它不在经典的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历史。很方便。