str*_*gee 55 shell dash history
我注意到基本上我曾经使用过的系统都没有/bin/sh
真正的可执行文件。它总是一个符号链接dash
,bash
在POSIX模式,或者类似的东西。
为什么?使用真正的、原始的有/bin/sh
什么缺点?(速度?许可?)
Bru*_*ger 39
我猜缺少功能 - 没有命令历史记录,没有花哨的重定向,没有命令行编辑。csh
由于这些原因,BSD 引入了 C shell。另一个因素是正版 Bourne Shell最近才以开源形式提供。除非您获得许可,否则您无法分发它。这使得免费发行版无法实现它,并使其在意识形态上对其他发行版和 *BSD 不受欢迎。
但是代码现在可用。你可以看看,编译它,试一试。
jll*_*gre 24
您问题中的陈述是不正确的。的Solaris的最高版本为10时提供传统真正的Bourne shell作为/bin/sh
。这样做不是为了破坏与可能因不同 shell 失败的旧脚本的兼容性。否则,这个选择非常令人沮丧。
大多数(如果不是全部)剩余的 Unix 和类 Unix 版本(包括 Solaris 11)确实提供了 POSIX 兼容的 shell,/bin/sh
因为 POSIX 要求sh
命令启动 POSIX shell,而不是不兼容的传统 Bourne shell。/bin/sh
一般是:
ksh88
或ksh93
在商业 Unix 实现上bash
上OS/X
(尽管它使用的是zsh
)ash
或pdksh
其它衍生物BSDs
bash
或dash
在 Gnu/Linux 发行版上。它不一定是链接,但可以是许多系统上的真正可执行文件,但 Gnu/Linux 除外。
有趣的是,尽管对您的问题提出了最高投票率的答案,但导致发行版开发人员安装与传统 Bourne shell 不同的东西的并不是缺少功能,/bin/sh
而是希望尽可能符合 POSIX,即表现得像一个类 Unix 操作系统。POSIX shell 比传统 Bourne shell 具有更多功能的事实只是此标准合规性目标的一个副作用。
这也是一个事实,特别是一些 shellbash
在调用 时表现不同sh
,这主要是从 shell 中删除功能,而不是相反。
Rap*_*ens 16
据我所知,最初的 Bourne shell 不能被 BSD 和 GNU 项目使用,因为它的许可证。
当时最初的 Unix 没有许可证,GNU 项目需要一个 GPL 下的 shell,所以他们使用 bash。
对于所有 BSD 的父级 BSD4 也是如此。由于 AT&T 的诉讼,他们需要重写原始 Unix 的所有源代码,包括 Bourne shell。
在传统的 BSD 产品线中,Bourne shell 一直发布到 4.3BSD-Reno(但不再用于 Net/2 和以下 4.4BSD)。由于许可证原因,它随后被 Kenneth Almquist(通常称为 ash)替换为与 bourne 兼容、类似于 svr4 的 sh。
来自 FreeBSD man sh
sh 命令,Thompson shell,出现在版本 1 AT&T UNIX 中。它在版本 7 AT&T UNIX 中被 Bourne shell 取代,它继承了名称 sh。
此版本的 sh 于 1989 年在 BSD 许可下在 AT&T System V Release 4 UNIX 的 Bourne shell 之后重写
所以这两个项目都被迫不使用 Bourne shell,而是选择了一个真正的开源 shell。
还有其他问题。Bourne Shell 确实使用了 sbrk() 而不是 malloc() 这使得它不是很便携。
在 Bourne Shell 通过 OpenSolaris 成为开源之后,我在 Geoff Collyer(帮助避免 sbrk() 在科恩壳牌)。
我制作 Bourne Shell 便携式版本的最初原因是,我喜欢让我在 1982 年到 1984 年间为“bsh”编写的历史编辑器也可以在 Bourne Shell 中使用。同时,我将我为“bsh”编写的大部分独特特性移植到了 Bourne Shell。
这是其中之一:
在线手册页位于: http ://schillix.sourceforge.net/man/man1/bosh.1.html 源代码是 schily 工具箱的一部分,位于:
https://sourceforge.net/projects/schilytools/files/
我建议使用:http : //sourceforge.net/projects/schilytools/files/schily-2015-08-18.tar.bz2 或更新的版本。
PS我对反馈感兴趣