当前位置: 首页>>技术问答>>正文


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

, , , ,

问题描述

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

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

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

最佳解决方案

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

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

B实际上是something $A,而不是预期的something else

请参阅this question

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

次佳解决方案

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

第三种解决方案

正如您所问的”system wide”:

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

因此,对于您的用户来说,修改~/.bashrc更安全(意味着文件”.bashrc” – 带有一个前导点,是 – 在您的home-directory中,例如/home/ankur/.bashrc),这会影响您的用户并将其他所有内容都留下。只有在真正意图改变system-wide时,才应更改/etc中的文件。

此外:如果存在,将使用这两种配置。首先,读取system-wide文件(此处为:/etc/bash.bashrc)并将”sourced”(其设置应用于当前会话),然后用户/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文件。

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/2109.html,未经允许,请勿转载。