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

Jua*_*ews 1 bash environment-variables

下面给出的是我的 /etc/environment 文件的内容

alias ...="cd ../../"
alias ls="ls -al"
export blah="blah blah"
Run Code Online (Sandbox Code Playgroud)

当我启动新的终端会话并更改为 sudo user as 时sudo su,只有 export 命令已运行,我可以使用 env 进行验证。未设置别名。

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

我在 RHEL 7 上运行。

Ko *_*our 5

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

添加alias到这个文件中是行不通的,因为这个文件不是一个 shell 脚本,只接受变量=值对。

/etc/environment 由 PAM-env 模块使用,与登录/非登录、交互/非交互以及 Bash/非 Bash 无关,因此无法使用脚本或全局扩展。该文件只接受变量=值对。

不可能导出别名或全局设置它们 - 它们需要在每个 shell 实例中再次设置。您要使用的文件~/.bashrc位于用户的主目录中。每次用户打开 bash shell 时都会执行此文件。所以在这个文件中设置的别名和变量只对那个 shell 有影响。

您还可以使用/etc/bash.bashrcwhich is System-wide .bashrc 文件用于交互式 bash shell。


之所以export在你的/etc/environment工作,实际上创建环境变量,即PAM-ENV解析器专门忽略export的关键字,以避免混乱的人谁不知道/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;
Run Code Online (Sandbox Code Playgroud)

例如这里可用- Linux-PAM/pam_env.c v0.79。见行00234