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


42

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

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

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

Answers:


35

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

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

B从字面上是something $A,不是预期的something else

看到这个问题

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


当有两个文件执行/ etc / environment和/etc/bash.bashrc相同的操作时,〜/ .bashrc的用途是什么?
trapaank 2012年

6
如果任何用户打开bash,则将执行/etc/bash.bashrc。〜/ .bashrc仅在保存主目录的所有者打开bash时执行。
安德烈Stannek

18

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


抱歉,我是linux的新手。bash壳将被打开吗?还有另一件事,当bash shell打开时,它会否覆盖/ etc / enviornment中设置的变量?
trapaank 2012年

我不确定何时正确执行/ etc / environment,但在进入桌面环境时Ubuntu会执行/etc/bash.bashrc。这就是为什么在此处设置变量的原因。我的猜测是/ etc / environment在启动时会在进入桌面之前执行一次,并且/etc/bash.bashrc的执行会覆盖变量。但是再次:我不确定。
安德烈Stannek

4
它是登录后无法启动的!
slm

6

当您询问“ 系统范围 ”时:

/etc目录中的配置文件适用于系统上的所有用户。对于/etc/bash.bashrc这一切,这将意味着在该计算机上使用“ Borne Again SHell”(又名Bash)的所有事物。即使您是唯一使用它的人,也可能会影响“技术用户”(只需查看/etc/passwd并检查“ / bin / bash”一词在grep bash /etc/passwd | wc -l其中的使用频率-或use ,它应该会给您直接使用该数字(意思是:“抢”文件“ / etc / passwd”中包含字符串“ bash”的所有行,并将结果(“ |”)发送到命令“ wc”(字数统计)以对行进行计数(“ -l”)。

因此,对您的用户而言,进行修改~/.bashrc(表示文件“ .bashrc”(例如/home/ankur/.bashrc,在主目录中带有前导点,是的))要安全得多,这只会影响您的用户,而将其他所有内容都保留下来。/etc仅当确实要在系统范围内进行更改时,才应更改文件中的文件。

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


3

除了系统范围和用户范围广泛的讨论中,一个最显著差别/etc/environment不是比其他的脚本~/.bashrc

/etc/environment不能取消引用变量inside ,它的变量赋值从字面上接受行值(如roadmr所述)。

如果您尝试通过添加新路径来破坏$PATH内部/etc/environment,那么您的Ubuntu就会将您锁定

PATH=$PATH:/new_path

如果您的Ubuntu Gnome或Unity登录页面无法让您进入而没有抱怨密码错误。而且您最近进行了修改/etc/environment,很可能是这种情况。

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

根据/etc/environment通过PAM堆栈,它由线填充环境变量线加载。


-1

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


我认为您在混淆〜/ .bashrc和/etc/bash.bashrc文件。第一个是用户打开外壳程序时本地的,第二个是所有用户打开外壳程序时全局的。
丹尼斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.