以下是/ etc / environment文件的内容
alias ...="cd ../../"
alias ls="ls -al"
export blah="blah blah"
当我开始新的终端会话并将其更改为sudo用户为sudo su
时,只有导出命令已运行,我可以使用env进行验证。别名未设置。
如果我运行source /etc/environment
,别名会按预期设置。我错过了什么吗?我还读到只有在系统启动时才会读取/ etc / environment。真的吗?
我在RHEL 7上运行。
答案 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
行。