我想在 FreeBSD 上试用 Bourne shell,所以我开始设置它供我使用。
在 中.shrc
,我设置了提示符,启用了 vi 模式,设置了一些别名,并导出了一些变量。
但是,我看到.profile
默认情况下也会导出一些变量。
据我了解,Bourne shell 将.profile
在每次启动时提供源代码。.shrc
如果是这样,同时拥有和的(历史)原因是什么.profile
?
我想在 FreeBSD 上试用 Bourne shell,所以我开始设置它供我使用。
在 中.shrc
,我设置了提示符,启用了 vi 模式,设置了一些别名,并导出了一些变量。
但是,我看到.profile
默认情况下也会导出一些变量。
据我了解,Bourne shell 将.profile
在每次启动时提供源代码。.shrc
如果是这样,同时拥有和的(历史)原因是什么.profile
?
最接近 Bourne shell 的东西是 OpenSolaris 的 Heirloom Bourne shell,它不是真正的开源程序,现在几乎没有任何操作系统,它位于 FreeBSD ports 集合中(通常安装在 下
shells/heirloom-sh
)/usr/ports
。请注意,这不是
sh
。 那是 FreeBSD 上的 Debian Almquist shell(略有改动的版本)。Heirloom Bourne shell 安装为
jsh
. 这没有任何关系~/.shrc
。它仅来源~/.profile
,并且仅当它作为登录 shell 调用时才来源。它来源的唯一其他文件是/etc/profile
.Bourne shell 并没有后来发展起来的所有这些复杂性,有很多不同的文件。具有讽刺意味的是,正是 C shell,最初是 BSD 的最爱,开启了所有这些其他rc 文件的趋势。
Heirloom Bourne shell 并不完全是Bourne shell。例如,它有作业控制命令;Bourne shell 没有,因为它是为没有这种东西的操作系统编写的。OpenSolaris 历史上发生的一些变化意味着这不是原来的 Bourne shell。正如我所说,现在任何操作系统都无法做到这一点;甚至在商业 Unices 上,人们也会从大约 1980 年代后期开始获得 Bourne shell 的更新版本,添加新的 System 5 Release 4 内容,就像这个一样。
那么,为什么您声称
~/.shrc
它适用于 Bourne shell 并在评论中指向 sh(1) 手册页?基本上,该评论是一个谎言。
sh
在 FreeBSD 和 NetBSD 上是 Almquist shell,FreeBSD 使用Debian Almquist shell的轻微改动版本,这反过来又是 Debian 人员在 21 世纪之交所做的 NetBSD Almquist shell 的轻微改动。如果您查看 sh(1) 手册,它会告诉您它是 Kenneth Almquist 编写的 shell,而不是 Stephen R. Bourne 编写的 shell。如果您想试用 Bourne shell,那么
sh
在 FreeBSD 上运行对您一点帮助都没有。该手册还告诉您如何手动设置您的
~/.profile
交互式 Almquist shell 源文件~/.shrc
。这在 Almquist shell 中默认情况下不会发生,这~/.shrc
不是标准的事情。~/.shrc
只是一个常规文件,/usr/share/skel/
当您的主目录由pw useradd
. 作为标准,它实际上并没有为任何 shell 做任何事情。如果您想尝试一些非常深奥的东西,甚至比 Heirloom Bourne shell 更深奥,FreeBSD 甚至可以使用 Thompson shell,就像
shells/osh
在 ports 中一样。在抓手方面,我可以建议尝试和学习 Almquist shell,而不是(或至少之前)尝试和学习 Heirloom Bourne shell。知道它更有用,因为
#!/bin/sh
FreeBSD 上的所有脚本当然都使用它。端口中的Watanabe shell
shells/yash
是另一个值得体验的。Watanabe 和 Debian Almquist shell 最接近仅具有符合 POSIX 的 shell 行为子集的感觉,尽管它们都具有非标准的emacs
命令行编辑模式。☺