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

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

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

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

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

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

B字面意思是something $A ,而不是预期的something else

看到这个问题 。

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

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

当你问“ 系统范围 ”时:

位于/etc目录中的配置文件适用于系统上的所有用户。 对于/etc/bash.bashrc这将意味着在该机器上使用“Borne Again SHell”又称Bash的所有和所有内容。 即使你是唯一使用它的人,也可能会有“技术用户”受到影响(只需查看/etc/passwd并查看术语“/ bin / bash”在那里说的频率 – 或者使用grep bash /etc/passwd | wc -l ,它应该直接给你那个号码(意思是:“抓住”文件“/ etc / passwd”中包含字符串“bash”的所有行,并发送结果(“|”)命令“wc”(字数)来计算行数(“ – 1”)。

因此,对于您的用户来说,修改~/.bashrc更安全(意味着文件“.bashrc” – 在您的主目录中带有一个前导点,是 – 例如/home/ankur/.bashrc ),然后它只会影响您的用户并将其他所有内容都留下 只有在真正意图进行系统范围的更改时,才应更改/etc文件。

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

除了系统范围和用户范围的讨论之外,最重要的区别是/etc/environment不是~/.bashrc以外的脚本。

你不能在/etc/environment取消引用变量,它的变量赋值从字面上理解行值(如roadmr已经提到的)。

如果你通过尝试追加新路径搞砸/etc/environment$PATH你的Ubuntu会锁定你

 PATH=$PATH:/new_path 

如果您的Ubuntu Gnome或Unity登录页面未能在不抱错密码的情况下让您进入。 你最近修改了/etc/environment ,很可能就是这种情况。

修复是登录虚拟控制台CTRL + ALT + F1登录控制台,手动检查$PATH ,并修复/etc/environment文件。

根据这个/etc/environment由PAM堆栈加载,它逐行填充环境变量。

两者之间的区别在于/etc/enivironment文件适用于所有用户,而bash.bashrc文件仅适用于该用户。 如果您在/etc/environment文件中执行了任何错误,那么后果可能会很严重,而您可以通过复制/ etc / environment文件的内容轻松撤消bash.bashrc文件中的更改。 但首先要优先考虑的是bash.bashrc文件,然后是/ etc / environment文件。 如果您在bash.bashrc文件中进行更改,那么终端将首先优先选择本地用户文件(即bash.bashrc ),然后提供给主文件(即/etc/environment )。