【问题标题】:bash: environment variable lost after su root?bash:su root 后环境变量丢失?
【发布时间】:2014-11-11 13:45:39
【问题描述】:

我在/etc/bash.bashrc 中定义了一些别名。 当我使用herbert 登录时,我可以使用这些别名。 但是我su root之后,这些别名就不能用了。

这很奇怪,因为/etc/bash.bashrc中的configs应该是全局的,所有用户都可以使用。

以前一切正常,但这些天变得奇怪了。我记得是我把我的 Bash 从 4.2.25 升级到了 4.3.30,但我不确定这个版本变化是否是原因。

这是因为 Bash 版本吗?

【问题讨论】:

    标签: bash environment-variables su


    【解决方案1】:

    当您执行su root(或只是su)时,用户 ID 会更改为超级用户的用户 ID,但不会加载默认环境。相反,请尝试su -

    解释手册 (man su),选项 --l--login 提供了与直接以该用户身份登录时所获得的环境相似的环境。这意味着将加载配置文件等内容。

    【讨论】:

    • 当我尝试“su -”时,它和以前一样完美。但我仍然想知道为什么“su root”可以在 bash 4.2.25 中正常工作。我已经使用这些别名很长时间了,只有在升级我的 bash 后才出现问题
    • 很高兴您的问题得到解决。在不了解您的配置的情况下,很难说出为什么版本之间的行为发生了变化。也许其他答案中提供的建议是相关的。我个人建议始终使用su -,因为这应该适用于所有情况。
    • 另外,当我使用“su root”时,/etc/bash.bashrc 中定义的别名将失效,而导出的变量如“LD_LIBRARY_PATH”仍然可以生效。这很奇怪!!别名和变量的行为不应该相同吗?
    • 老实说,我不确定 :) 也许其他人能够对这个问题有所了解,但我认为解决方案是始终使用- 开关。这个问题是非常离题的(我认为它更适合 Linux/Unix Stack Exchange),所以如果您正在寻找有关 why 的更多详细信息,也许值得询问那里的问题。
    • @Herbert,不同之处在于 su root 您正在启动交互式 -login shell,这意味着只有 ~/.bashrc 被读取(如果 /etc/bash.bashrc您以这种方式配置了 bash)。当您运行su - 时,您将启动一个交互式登录shell,在这种情况下仅读取~/.profile/etc/profile。按照惯例,您依次从配置文件中获取 bashrc。在您的情况下,/etc/profile 可能特别是 /etc/bash.bashrc 的来源,而对于 non-login shell,它仅在 bash 配置为时提供 /etc/bash.bashrc。请看我的回答。
    【解决方案2】:

    如果您自己构建了 bash 4.3.30,您可能忘记按照操作系统配置它的方式来配置它。许多 Linux 发行版修改 bash 以获取像 /etc/bash.bashrc 这样的文件,以及用于交互式 shell 的 ~/.bashrc。 Vanilla bash 仅来源 ~/.bashrc

    如果我没记错的话,配置是通过修改config-top.h来完成的。

    另见Dot Files

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-24
      • 2010-12-19
      • 2012-06-27
      • 1970-01-01
      • 2014-10-06
      • 2021-06-21
      • 1970-01-01
      相关资源
      最近更新 更多