bash.bashrc 和 /etc/environment 文件之间的区别

bash.bashrc 和 /etc/environment 文件之间的区别

到目前为止,我习惯在bash.bashrc文件中设置环境变量。最近有人告诉我使用该/etc/environment文件。嗯,两者都很好用。

那么,它们之间有什么区别呢?

我谷歌了一下,发现“bashrc 用于特定用户和环境,系统范围”。这里的系统范围是什么意思?/etc/bash.bashrc我猜也是在系统范围内应用更改。如果我错了,请纠正我。任何帮助都将不胜感激。

答案1

一个区别是,它/etc/environment仅包含变量定义,并且似乎没有经过任何类型的变量扩展/插值。因此,您无法在定义中引用变量。例如,这不起作用:

A="else"
B="something $A"

B 确实是这样的something $A,不是预期的something else

这个问题

顺便说一句,您通过 Google 找到的答案似乎是指用户的~/.bashrc,而不是系统范围的/etc/bash.bashrc。这可能会造成您的困惑。

答案2

/etc/environment文件在启动时为每个用户设置系统范围内的变量。/etc/bash.bashrc如果bash任何用户打开 shell,则会执行其中的命令。因此,除非bash至少打开一次 shell,否则不会设置变量。

答案3

正如你所问的“系统范围“:

目录中的配置文件/etc适用于系统上的所有用户。/etc/bash.bashrc这意味着适用于该机器上使用“Borne Again SHell”(又名 Bash)的所有人。即使您是唯一使用它的人,也可能有“技术用户”受到影响(只需查看/etc/passwd并检查术语“/bin/bash”在那里出现的频率——或者使用grep bash /etc/passwd | wc -l,它应该直接为您提供该数字(意思是:从文件“/etc/passwd”中“抓取”所有包含字符串“bash”的行,并将结果(“|”)发送到命令“wc”(字数统计)以计算行数(“-l”)。

因此对于您的用户来说,修改~/.bashrc(即在您的主目录中修改文件“.bashrc”——是的,以点开头——例如/home/ankur/.bashrc)更为安全,这只会影响您的用户,而不会影响其他所有内容。 中的文件/etc只有在真正需要进行系统范围的更改时才应更改。

此外:如果存在这两种配置,则将使用它们。首先,系统范围的文件(此处/etc/bash.bashrc:)被读取并“获取”(其设置应用于当前会话),然后用户/home/username/.bashrc得到相同的处理,因此可以添加甚至更改/覆盖全局文件中的设置/etc/bash.bashrc

答案4

两者的区别在于,该/etc/enivironment文件适用于所有用户,而 bash.bashrc 文件只适用于特定用户。如果您在文件中犯了任何错误,/etc/environment那么后果可能很严重,而您可以通过复制 /etc/environment 文件的内容轻松撤消 bash.bashrc 文件中的更改。但优先考虑的是该bash.bashrc文件,然后是 /etc/environment 文件。并不是说如果您在文件中进行了更改,bash.bashrc那么终端将优先考虑本地用户文件(即bash.bashrc),然后是主文件(即/etc/environment)。

相关内容