.shrc 和 .profile 之间有什么区别?

.shrc 和 .profile 之间有什么区别?

我想在 FreeBSD 上尝试 Bourne shell,所以我开始设置它以供我使用。

在 中.shrc,我设置了提示符,启用了 vi 模式,设置了一些别名,并导出了一些变量。

但是,我发现.profile默认情况下也会导出一些变量。

据我了解,Bourne shell 会.profile在每次启动时获取源代码。如果是这样,同时具有.shrc和 的(历史)原因是什么.profile

答案1

与 Bourne shell 最接近的东西是来自 OpenSolaris 的 Heirloom Bourne shell,它并不是真正的开源程序,而且现在在几乎任何操作系统上都找不到,它位于shells/heirloom-shFreeBSD 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) 手册页呢?

基本上,这个评论是一个谎言。

shFreeBSD 和 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/shFreeBSD 上的所有脚本当然都使用它。

港口中的渡边贝壳shells/yash是另一个值得体验的地方。 Watanabe 和 Debian Almquist shell 提供了最接近于只有符合 POSIX 的 shell 行为子集的体验,尽管它们都具有非标准emacs命令行编辑模式。 ☺

答案2

.shrc关于和之间的区别.profile。今天我偶然发现了配置NetBSD-10的eixstence .shrc,我将参考这个系统。在NetBSD中.shrc不直接出现嘘(1) 也不在 中apropos,但它确实显示为变量 的内容ENV

ENV引用配置文件的使用在嘘(1)页,我复制了其中的一小部分。 HTH。再见

因此,用户应该将仅在登录时执行的命令放置在 .profile 文件中,并将为每个 shell 执行的命令放置在 ENV 文件中。要将 ENV 变量设置为某个文件,请将以下行放入主目录的 .profile 中

相关内容