约旦的答案不正确。/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工作,则保持.profile
Bourne 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.
您想在这里说什么?除那段外,我理解其他所有内容。