约旦的答案不正确。/etc/profile不是所有shell都提供的。正如你指出的,它不是由源csh,tcsh-我不知道zsh。它源自Bourne shell(sh)派生词,例如Korn Shell(ksh)和BASH(bash)。csh使用/etc/login。倾向于只使用Borne Shell衍生物的人往往会忘记其他存在的shell。他们添加了一些/etc/profile期望它应用于“所有用户”的东西,然后当奇数C Shell用户(而且我们是一个奇数)没有他们配置的东西时感到惊讶/etc/profile。
即使这样,人们还是会忘记其他Borne Shell衍生壳的存在。如果使用bash或ksh,则可以随意/etc/profile在Bourne Shell中添加无效的语法,例如定义变量并将其导出在同一行上。然后,您将获得执行#!/bin/sh该脚本的脚本,并且该脚本使语法令人窒息。/etc/profile应该坚持使用Bourne Shell兼容语法。
同样,您应该自己坚持使用它.profile(.bash_profile如果需要一些bash语法,请使用)-可能需要额外输入一些内容,但是您需要一次完成所有额外输入。参考,${HOME}而不是参考~。等等。某些类型的Unix,cron作业在下运行sh,您的每一行Makefile均由处理sh,因此,如果您跨多种类型的UNIX工作,则保持.profileBourne Shell兼容确实是值得的。作为SysAdmin,我无法告诉您我已经通过修复某个人使其.profile与Bourne Shell兼容的方式为他人提供了帮助。
在Linux上,/bin/sh是/bin/bash运行它的链接,当您运行它时,它看起来是运行它的路径,并且(理论上)仅将其自身限制为Bourne Shell支持的功能。同样,vi在Linux上确实是vim,再次限制了自身。有时,您会看到功能“渗漏”。偶尔vim假装为be vi会做些vim支持的事情,但这vi并不是因为作者vim忘记了在“ vi向后兼容”模式下禁用此功能。如果bash假装sh具有类似的“渗漏”功能,我不会感到惊讶。如果某些功能“可以在Linux上的Borne Shell上运行”,而不能在基于System V或BSD的UNIX(AIX,OpenBSD等)上运行,则不会感到惊讶。
Does it have positive ... and understood.您想在这里说什么?除那段外,我理解其他所有内容。