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

Ank*_*iya 42 command-line bash environment-variables bashrc

到目前为止,我曾经在bash.bashrc文件中设置环境变量。最近我被告知要使用该/etc/environment文件。嗯,两者都工作正常。

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

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

roa*_*dmr 36

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

A="else"
B="something $A"
Run Code Online (Sandbox Code Playgroud)

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

看到这个问题

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

  • 如果任何用户打开 bash,就会执行 /etc/bash.bashrc。~/.bashrc 只有在保存它的主目录的所有者打开 bash 时才会执行。 (6认同)

And*_*nek 18

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

  • 它是在登录时,而不是启动! (4认同)

Izz*_*zzy 6

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

位于/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文件。