【发布时间】:2010-10-09 03:02:43
【问题描述】:
自从我使用 Unix-Linux/Solaris 以来,我一直在使用“bash”。现在,我很想知道像 'ksh'、'zsh' 这样的 shell 提供什么更好? “极客”有什么用?
【问题讨论】:
自从我使用 Unix-Linux/Solaris 以来,我一直在使用“bash”。现在,我很想知道像 'ksh'、'zsh' 这样的 shell 提供什么更好? “极客”有什么用?
【问题讨论】:
我安装了一个来提供每个会话的 shell 历史记录。
这里的独特之处在于每个窗口都有自己的 shell 历史。很方便。
【讨论】:
我偏好使用 ksh93。这意味着我发现自己使用的几乎所有系统都可以使用 ksh 的基础知识,因此我的交互体验和 98% 的复杂配置文件保持不变。
【讨论】:
bash:根据我的经验,大多数人使用 bash,部分原因是它是大多数 Linux 系统中的标准 shell。
ksh:许多 Solaris 系统改用 ksh,但这似乎正在失去对 bash 的普及。
csh:Csh 曾经更流行,但通常被 tcsh 取代。 tcsh 对于那些非常熟悉类 c 语法的人来说还不错。
zsh:我没用过zsh,不过好像功能很丰富。
就个人而言,我更喜欢 bash,因为它几乎安装在所有与 unix 兼容的操作系统上,用途广泛,是简单命令行工具和脚本语言之间的良好折衷。
【讨论】:
bash 有点慢,但像许多 FSF 程序一样,它试图合并所有已知的功能。我使用ksh93,它在很大程度上与bash 融合。 ksh 的主要优点是它有一个很好的接口,可以用 C 代码扩展 shell。它也更容易定制,例如,让 tab 键在上下文中做任何你想做的事情。缺点是没有内置命令补全;您必须对其进行编程。
避免使用csh 及其派生词 :-)
【讨论】:
根据我的经验,标准 Unix shell(对我而言,这意味着 csh、sh、ksh)中很少有在 @987654324 中至少以等效形式存在的好东西@。因此,只要您对 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 中。
【讨论】:
最好知道 Bash 具有最广泛的兼容性,您基本上可以坐在任何 Unix 上,它会在那里。
Zsh 可能是最现代的 shell 之一。你可以用它做各种疯狂有趣的事情
【讨论】:
如果您正在使用 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。
【讨论】: