/ etc / environment文件未执行某些命令

时间:2016-11-05 11:10:03

标签: bash environment-variables

以下是/ etc / environment文件的内容

alias ...="cd ../../"
alias ls="ls -al"
export blah="blah blah"

当我开始新的终端会话并将其更改为sudo用户为sudo su时,只有导出命令已运行,我可以使用env进行验证。别名未设置。

如果我运行source /etc/environment,别名会按预期设置。我错过了什么吗?我还读到只有在系统启动时才会读取/ etc / environment。真的吗?

我在RHEL 7上运行。

1 个答案:

答案 0 :(得分:2)

/etc/environment用于为登录时的每个用户设置环境变量。因此,您不需要在此文件中使用export

alias添加到此文件中无法正常工作,因为此文件不是shell脚本,只接受变量=值对。

  

/ etc / environment由PAM-env模块使用,并且与之无关   登录/非登录,交互/非交互式以及Bash /非Bash,   所以不能使用脚本或全局扩展。该文件只接受   变量=值对。

无法导出别名或全局设置它们 - 需要在每个shell实例中再次设置它们。 您要使用的文件是~/.bashrc在用户的主目录中。每次用户打开bash shell时都会执行此文件。因此,此文件中设置的别名和变量仅对该shell有效。

您还可以使用系统范围的.bashrc文件/etc/bash.bashrc作为交互式bash shell。

export/etc/environment工作且实际创建的变量和env变量的原因是pam-env解析器专门忽略export关键字,以避免混淆#39}的人; t知道/etc/environment不是shell脚本。

您可以在pam_env.c源代码中看到

/* skip over "export " if present so we can be compat with
   bash type declarations */
  if (strncmp(key, "export ", (size_t) 7) == 0)
      key += 7;

例如here - Linux-PAM/pam_env.c v0.79。见第00234行。