我想在 FreeBSD 上尝试 Bourne shell,所以我开始设置它以供我使用。
在 中.shrc
,我设置了提示符,启用了 vi 模式,设置了一些别名,并导出了一些变量。
但是,我发现.profile
默认情况下也会导出一些变量。
据我了解,Bourne shell 会.profile
在每次启动时获取源代码。如果是这样,同时具有.shrc
和 的(历史)原因是什么.profile
?
答案1
与 Bourne shell 最接近的东西是来自 OpenSolaris 的 Heirloom Bourne shell,它并不是真正的开源程序,而且现在在几乎任何操作系统上都找不到,它位于shells/heirloom-sh
FreeBSD ports 集合中(通常安装在/usr/ports
)。
请注意,这是不是 sh
。
那是 FreeBSD 上的 Debian Almquist shell(稍作修改的版本)。
Heirloom Bourne shell 安装为jsh
.这个没办法处理~/.shrc
。它仅来源~/.profile
,并且仅当它作为登录 shell 调用时才来源。它来源的唯一其他文件是/etc/profile
.
Bourne shell 没有后来出现的所有这些复杂性,并且有许多不同的文件。讽刺的是,正是 C shell(最初是 BSD 的最爱)开启了所有这些趋势其他.rc 文件。
Heirloom Bourne 外壳不是相当伯恩外壳。例如,它具有作业控制命令; Bourne shell 没有这个功能,因为它是为没有这样的东西的操作系统编写的。 OpenSolaris 历史上发生的一些变化意味着这不是最初的 Bourne shell。正如我所说,现在任何操作系统都无法实现这一点。即使在商业 Unices 上,人们也会从大约 20 世纪 80 年代末开始获得 Bourne shell 的更新版本,添加新的 System 5 Release 4 内容,就像这个一样。
那么为什么您声称~/.shrc
它适用于 Bourne shell 并在评论中指向 sh(1) 手册页呢?
基本上,这个评论是一个谎言。
sh
FreeBSD 和 NetBSD 上使用的是 Almquist shell,FreeBSD 使用稍微修改过的版本德班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 中一样。
就抓手而言,我建议在尝试和学习 Heirloom Bourne shell 之前(或至少在之前)尝试和学习 Almquist shell。了解它会更有用,因为#!/bin/sh
FreeBSD 上的所有脚本当然都使用它。
港口中的渡边贝壳shells/yash
是另一个值得体验的地方。 Watanabe 和 Debian Almquist shell 提供了最接近于只有符合 POSIX 的 shell 行为子集的体验,尽管它们都具有非标准emacs
命令行编辑模式。 ☺