到目前为止,我习惯在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
)。